最近開始學(xué)習(xí)TensorFlow了矾瘾,所以Python的筆記好久沒有更新女轿。另外也是為了提高筆記的內(nèi)容價(jià)值,所以更新的會(huì)速度減慢壕翩。
1.創(chuàng)建類屬性及實(shí)例屬性
添加類屬性:
class Student(object):
name = 'Student' # 創(chuàng)建一個(gè)類屬性name
student = Student()
student.name # 先訪問實(shí)例屬性name蛉迹,由于實(shí)例屬性name不存在,于是再自動(dòng)訪問類屬性name
### 輸出 ###
'Stddent'
如果要添加一個(gè)實(shí)例屬性放妈,可以使用下面的兩種方式:
# 方式1
student.name = 'Li'
# 方式2
class Student(object):
def __init__(self,name): # 利用構(gòu)造函數(shù)
self.name = name
student = Student('Li')
當(dāng)實(shí)例屬性名和類屬性名相同時(shí)北救,實(shí)例屬性會(huì)覆蓋類屬性:
class Student(object):
name = 'Student'
student = Student()
student.name = 'Li'
student.name # 實(shí)例屬性覆蓋了類屬性
Student.name # 訪問類屬性 注意大小寫(后面也是)
del student.name # 刪除實(shí)例屬性后,會(huì)自動(dòng)訪問同名的類屬性
student.name
### 輸出 ###
'Li'
'Student'
'Student'
1.1.比較實(shí)例屬性和類屬性
- 訪問優(yōu)先級(jí):實(shí)例屬性和類屬性同名時(shí)會(huì)出現(xiàn)覆蓋情況(實(shí)例屬性覆蓋類屬性)芜抒,所以建議不要使用相同的實(shí)例屬性和類屬性
- 歸屬:實(shí)例屬性彼此獨(dú)立珍策,類屬性為實(shí)例所共享
2.探究self參數(shù)
從上面的例子中我們知道了如何添加類屬性和實(shí)例屬性以及它們的區(qū)別。下面我們分析一下構(gòu)造函數(shù)__init__
的self
參數(shù)宅倒。
你可能會(huì)疑惑攘宙,為什么在定義一個(gè)類的方法時(shí)它的第一個(gè)參數(shù)總是self
,這是因?yàn)椋@里的self
參數(shù)指向類的實(shí)例本身蹭劈,它將把相關(guān)參數(shù)綁定到實(shí)例上疗绣。下面舉一個(gè)栗子證明self代表的是實(shí)例本身:
class Number(object):
def return_self(self):
return self # 返回實(shí)例!
def print_number(self):
print(123)
num = Number() # 實(shí)例化
n = num.return_self() # return_self調(diào)用實(shí)例對(duì)象并將其返回給變量n
num.print_number()
n.print_number()
### 輸出 ###
123
123
# 上面的代碼中铺韧,num和n都指向Number的實(shí)例多矮,可見,self參數(shù)就是代表類的實(shí)例本身哈打!
# 另外塔逃,還可以通過id()函數(shù)驗(yàn)證 id()函數(shù)用于獲取對(duì)象的內(nèi)存地址 如果地址相同 那么證明兩個(gè)對(duì)象是相同的
id(num)
id(n)
### 輸出 ###
1746475108728
1746475108728
而在調(diào)用方法的時(shí)候只需傳入除self
之外的相關(guān)變量,這是因?yàn)?strong>Python能夠自動(dòng)把實(shí)例變量self傳入前酿。另外患雏,由于指向?qū)嵗膮?shù)self
不是關(guān)鍵字,所以把原來self
位置用其他名稱代替也沒有關(guān)系罢维,但建議使用約定俗成的self
淹仑。
有關(guān)的self的理解網(wǎng)上還有更詳細(xì)深刻的解釋,我的建議是隨著學(xué)習(xí)不斷深入再逐漸加深對(duì)概念的認(rèn)識(shí)肺孵。知識(shí)是不斷迭代的匀借,而我筆記也會(huì)不斷的更新。