【python】詳解類class的屬性:類資料屬性、例項資料屬性、特殊的類屬性、屬性隱藏(二)
阿新 • • 發佈:2018-11-28
自上一篇python中的類,物件,方法,屬性初認識(一)認識了類的基本架構,下面繼續對類進行詳解,更加深入瞭解類的屬性、方法、訪問控制這三個方面的類容。
緊接上一篇類的例項:
一、資料屬性
1、在上面的person類中,“tall”、“name”、"age"和"weight "都被稱為類的資料屬性,但是它們又分為類資料屬性和例項資料屬性。
首先看一段程式碼,程式碼中分別展示了對類資料屬性和例項資料屬性的訪問:
通過內建函式dir(),或者訪問類的字典屬性’_ _dict _ _'這兩種方式都可以檢視類有哪些屬性,程式碼的輸出為:
對於類資料屬性和例項資料屬性,可以總結為:
- 類資料屬性屬於類本身,可以通過類名進行訪問/修改
- 類資料屬性也可以被類的所有例項訪問/修改
- 在類定義之後,可以通過類名動態新增類資料屬性,新增的類屬性也被類和所有例項共有
- 例項資料屬性只能通過例項訪問
- 在例項生成後,還可以動態新增例項資料屬性,但是這些例項資料屬性只屬於該例項
2、特殊的類屬性:對於所有的類,都有一組特殊的屬性
- _ _ name_ _:類的名字(字串)
- _ _ doc _ _ :類的文件字串
- _ _ bases _ _:類的所有父類組成的元組
- _ _ dict _ _:類的屬性組成的字典
- _ _ module _ _:類所屬的模組
- _ _ class _ _:類物件的型別
輸出結果為:
3、屬性隱藏:類資料屬性屬於類本身,被所有該類的例項共享;並且,通過例項可以去訪問/修改類屬性。英國留學一年的費用但是,在通過例項中訪問類屬性的時候一定要謹慎,因為可能出現屬性"隱藏"的情況。
輸出結果:
對於不可變型別的類屬性,隱藏屬性可以總結為:
-
對於不可變型別的類屬性person.tall,可以通過例項Bruce進行訪問,並且"person.tall is Bruce.tall"
-
當通過例項賦值/修改tall屬性的時候,將為例項Bruce新建一個tall例項屬性,這時,“person.tall is not Bruce.tall”
-
當通過"del Bruce.tall"語句刪除例項的tall屬性後,再次成為"person.tall is Bruce.tall"
對於可變型別的類屬性,隱藏屬性可以總結為:
- 同樣對於可變型別的類屬性person.hobbies,可以通過例項Bruce進行訪問,並且"person.hobbies is
Bruce. hobbies" - 當通過例項賦值hobbies 屬性的時候,都將為例項Bruce新建一個hobbies例項屬性,這時,“person.hobbies is not
Bruce. hobbies” - 當通過"del Bruce. hobbies"語句刪除例項的hobbies屬性後,再次成為"person. hobbies is Bruce.
hobbies" - 當通過例項修改hobbies屬性的時候,將修改Bruce. hobbies指向的記憶體地址(即person.hobbies),此時,“person.hobbies is not Bruce. hobbies”
注意,雖然通過例項可以訪問類屬性,但是,不建議這麼做,最好還是通過類名來訪問類屬性,從而避免屬性隱藏帶來的不必要麻煩