首發於 微信公衆號: 脾氣豬
轉摘需保留公衆號和來源
文字有點長,對於不想看文字的朋友,能夠去這裏看視頻,視頻可能更好理解
本節課咱們學習類的屬性
微信
知識點:類的屬性,是能夠被它的實例共享的學習
首先, 咱們使用鴨類設計方案,來實例化幾個對象設計
# 爲了減小代碼量,使用新的鴨類設計方案 class 鴨類設計方案: type_name = "鴨" def 吃東西(self): print("開始用嘴巴吃東西") def 跑(self): print(self.type_name, ":用2條 後肢 跑") def 叫(self): print("嘎嘎嘎") a = 鴨類設計方案() b = 鴨類設計方案() c = 鴨類設計方案()
而後,讓咱們來打印下他們3個的type_name屬性code
print(a.type_name, b.type_name, c.type_name) # 輸出 # 鴨 鴨 鴨
咱們看到,他們都輸出了 鴨,視頻
是的,要訪問一個對象的屬性,格式是 對象名.屬性
對象
對象名 後面跟了一個 英文句號.
繼承
這裏的點 .
你能夠理解爲 的
get
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
方便吧! 不要濫用哦!
本節課,主要講了 類的屬性 默認狀況會被 這個類實例化的全部對象共享, 除非某個對象,本身對這個屬性,進行了修改,不然,屬性的值,會一直和類保持同步
那麼, 這個特性有啥用呢? 下下節課 揭曉