什麼是面向物件-類的屬性
首發於 微信公眾號: 脾氣豬
轉摘需保留公眾號和來源
文字有點長,對於不想看文字的朋友,可以去這裡看視訊,視訊可能更好理解
https://www.piqizhu.com/v/D8V9Wpkd1Wr
本節課我們學習類的屬性
知識點:類的屬性,是可以被它的例項共享的
首先, 我們使用鴨類設計方案,來例項化幾個物件
# 為了減少程式碼量,使用新的鴨類設計方案 class 鴨類設計方案: type_name = "鴨" def 吃東西(self): print("開始用嘴巴吃東西") def 跑(self): print(self.type_name, ":用2條 後肢 跑") def 叫(self): print("嘎嘎嘎") a = 鴨類設計方案() b = 鴨類設計方案() c = 鴨類設計方案()
然後,讓我們來列印下他們3個的type_name屬性
print(a.type_name, b.type_name, c.type_name) # 輸出 # 鴨 鴨 鴨
我們看到,他們都輸出了 鴨,
是的,要訪問一個物件的屬性,格式是物件名.屬性
物件名 後面跟了一個 英文句號.
這裡的點.
你可以理解為的
a.老婆 == a的老婆
意思是相等的
共享類的屬性
預設情況下,這3個物件,從類那裡繼承了type_name這個屬性,所以,我們打印出的是鴨
接著,我們來修改下 type_name的值,然後列印修改後的值
鴨類設計方案.type_name = "www.piqizhu.com" # 修改為一個網址 print(a.type_name, b.type_name, c.type_name) # 輸出 # www.piqizhu.com www.piqizhu.com www.piqizhu.com
我們發現,a, b, c這3個物件的type_name值,也跟著變了
這說明,他們會共享 類的屬性
單獨修改物件的屬性
接著,讓我們來修改下 物件a的type_name (注意,我們這裡是修改物件a,而不是修改類,要搞清楚類和物件的區別)
a.type_name = "微信公眾號: 脾氣豬" # 修改物件a的屬性 print(a.type_name, b.type_name, c.type_name) # 輸出 # 微信公眾號: 脾氣豬 www.piqizhu.com www.piqizhu.com
發現了沒,a物件的type_name已經成功被我們修改了
這說明,我們可以單獨的修改某個物件的屬性
現在,我們再來修改下 類的type_name
鴨類設計方案.type_name = "鴨子" # 修改為 鴨子 print(a.type_name, b.type_name, c.type_name) # 輸出 # 微信公眾號: 脾氣豬 鴨子 鴨子
大家發現了嗎? 這次我們修改類的type_name屬性,物件b和c被修改了, 而物件a,卻沒有被修改!
這說明什麼? 說明物件a的type_name屬性 已經不受控制了,可以擺脫類的控制了
那麼物件a的type_name 是怎麼擁有這種能力的呢?
因為上面我們給a的type_name 單獨進行了賦值,把它改成了微信公眾號: 脾氣豬
在對a的type_name完成修改後,a的type_name便有了自我意識,可以自己掌控自己,不再受到類的控制了
現在讓我們把物件b和c的type_name也喚醒吧
b.type_name = "學Python" c.type_name = "到脾氣豬" print(a.type_name, b.type_name, c.type_name) # 輸出 # 微信公眾號: 脾氣豬 學Python 到脾氣豬
接著,讓我們再來通過類,操作物件的屬性試試?
鴨類設計方案.type_name = "鴨子" # 修改為 鴨子 print(a.type_name, b.type_name, c.type_name) # 輸出 # 微信公眾號: 脾氣豬 學Python 到脾氣豬
咦! 居然無法通過類,操作物件的屬性了,物件a, b, c的type_name屬性果然不受到類的控制了
由於Python這門語言,是一個動態的,很寬鬆的語言,所以,我們可以隨時很方便的給類新增屬性
我們的鴨類設計方案,已經有了一個type_name屬性,我們給它增加一個age屬性試試
鴨類設計方案.age=99 # 動態的 增加age屬性 a.age = 100 # 讓物件a擁有自主能力 print(鴨類設計方案.age, a.age, b.age, c.age) # 輸出 # 99 100 99 99
方便吧! 不要濫用哦!
本節課,主要講了 類的屬性 預設情況會被 這個類例項化的所有物件共享, 除非某個物件,自己對這個屬性,進行了修改,否則,屬性的值,會一直和類保持同步
那麼, 這個特性有啥用呢? 下下節課 揭曉