1. 程式人生 > >【python】詳解類class的屬性:類資料屬性、例項資料屬性、特殊的類屬性、屬性隱藏(二)

【python】詳解類class的屬性:類資料屬性、例項資料屬性、特殊的類屬性、屬性隱藏(二)

自上一篇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”

注意,雖然通過例項可以訪問類屬性,但是,不建議這麼做,最好還是通過類名來訪問類屬性,從而避免屬性隱藏帶來的不必要麻煩