本文目錄一覽:
python中類的實例對象的理解總結?
9.3.3. 實例對象
現在我們可以用實例對象作什麼?實例對象唯一可用的操作就是屬性引用。有兩種有效的屬性名。
數據屬性 相當於 Smalltalk 中的「實例變量」或 C++ 中的「數據成員」。和局部變量一樣,數據屬性不需要聲明,第一次使用時它們就會生成。例如,如果 x 是前面創建的 MyClass 實例,下面這段代碼會打印出 16 而在堆棧中留下多餘的東西:
x.counter = 1
while x.counter 10:
x.counter = x.counter * 2
print(x.counter)
del x.counter
另一種為實例對象所接受的引用屬性是 方法。方法是「屬於」一個對象的函數。(在 Python 中,方法不止是類實例所獨有:其它類型的對象也可有方法。例如,鏈表對象有 append,insert,remove,sort 等等方法。然而,在後面的介紹中,除非特別說明,我們提到的方法特指類方法)
實例對象的有效名稱依賴於它的類。按照定義,類中所有(用戶定義)的函數對象對應它的實例中的方法。所以在我們的例子中,x.f 是一個有效的方法引用,因為 MyClass.f 是一個函數。但 x.i 不是,因為 MyClass.i 不是函數。不過 x.f 和 MyClass.f 不同,它是一個 方法對象 ,不是一個函數對象。
Python中類與實例的其他說明解釋?
9.4. 一些說明
數據屬性會覆蓋同名的方法屬性。為了避免意外的名稱衝突,這在大型程序中是極難發現的 Bug,使用一些約定來減少衝突的機會是明智的。可能的約定包括:大寫方法名稱的首字母,使用一個唯一的小字符串(也許只是一個下劃線)作為數據屬性名稱的前綴,或者方法使用動詞而數據屬性使用名詞。
數據屬性可以被方法引用,也可以由一個對象的普通用戶(客戶)使用。換句話說,類不能用來實現純凈的數據類型。事實上,Python 中不可能強制隱藏數據——一切基於約定(如果需要,使用 C 編寫的 Python 實現可以完全隱藏實現細節並控制對象的訪問。這可以用來通過 C 語言擴展 Python)。
客戶應該謹慎的使用數據屬性——客戶可能通過踐踏他們的數據屬性而使那些由方法維護的常量變得混亂。注意:只要能避免衝突,客戶可以向一個實例對象添加他們自己的數據屬性,而不會影響方法的正確性——再次強調,命名約定可以避免很多麻煩。
從方法內部引用數據屬性(或其他方法)並沒有快捷方式。我覺得這實際上增加了方法的可讀性:當瀏覽一個方法時,在局部變量和實例變量之間不會出現令人費解的情況。
一般,方法的第一個參數被命名為 self。這僅僅是一個約定:對 Python 而言,名稱 self 絕對沒有任何特殊含義。(但是請注意:如果不遵循這個約定,對其他的 Python 程序員而言你的代碼可讀性就會變差,而且有些 類查看器 程序也可能是遵循此約定編寫的。)
類屬性的任何函數對象都為那個類的實例定義了一個方法。函數定義代碼不一定非得定義在類中:也可以將一個函數對象賦值給類中的一個局部變量。例如:
# Function defined outside the class
def f1(self, x, y):
return min(x, x+y)
class C:
f = f1
def g(self):
return ‘hello world’
h = g
現在 f, g 和 h 都是類 C 的屬性,引用的都是函數對象,因此它們都是 C 實例的方法-- h 嚴格等於 g 。要注意的是這種習慣通常只會迷惑程序的讀者。
python實例成員實例變量
1、語法:
定義:對象.變量名
調用:對象.變量名
2、說明:
(1)首次通過對象賦值為創建,再次賦值為修改
x01=wife()
wife.name=”張三” 此時為創建
wife.name=”李四” 此時為修改
(2)通過在構造函數__init__中創建
wife(“張三”,24)
print(w01.name)
(3)、每個對象存儲一份,通過對象地址訪問。
3、作用:描述所有對象的共有數據。
實例方法:
1、語法
定義:def方法名稱(self,參數列表):
方法體
調用:對象地址.實例名稱(參數)
作用:所有對象共享方法。
對象是指構造函數,方法是指形為函數。
”’
class Studons:
def __init__(self,name,xibie,nianling,fenshu):
self.name=name
self.xibie=xibie
self.nianling=nianling
self.fenshu=fenshu
def dayin(self):
print(“姓名:%s,性別:%s,年齡:%d,分數:%d”%(self.name,self.xibie,self.nianling,self.fenshu))
#定義函數根據姓名查找每個人的信息。
list01=[Studons(“張無忌”,”女”,2,98),
Studons(“張老六”,”男”,61,95),
Studons(“三豐”,”男”,31,95),
Studons(“小麗麗”,”女”,21,93),
]
def cha_name(name):
for item in list01:
if name==item.name:
# print(item.name,item.nianling)
item.dayin()
cha_name(“小麗麗”)
#2、
def fund_xus(names):
for itme in list01:
if itme.name==names:
return itme
print(fund_xus(“小麗麗”).name)
#查找所有女同學
def fund_nv(age):
list02 = []
for itme in list01:
if itme.xibie==age:
list02.append(itme)
return list02
ae=fund_nv(“女”)
for ime in ae:
ime.dayin()
#統計30歲以上的人的數量
def count_stud():
coun=0
for itme in list01:
if itme.nianling=30:
coun+=1
return coun
print(count_stud())
#將所有學生的成績歸0
def list_0():
for itme in list01:
itme.fenshu=0
#獲取列表中所有人的名字
def pen_name():
name=[]
for itme in list01:
name.append(itme.name)
return name
print(pen_name())
#查找年齡 最大的學生對象
def max_nl():
maxt=list01[0]
for itme in range(len(list01)):
if maxt.nianlinglist01[itme].nianling: span=”” /list01[itme].nianling:
maxt=list01[itme]
return maxt
max_nl().dayin()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/194690.html