Python 类的属性与实例属性
生活随笔
收集整理的這篇文章主要介紹了
Python 类的属性与实例属性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
放假歸來 ~~~
一、概念
- 類對象:類名
- 實例對象:通過類創建的對象
- 類屬性:類對象所擁有的屬性。歸類所有,被類對象和實例對象所共有。
類的公有屬性可以在類外被訪問。 - 實例屬性:實例對象所特有的屬性,類對象不能擁有,即不能通過類對象調用。
實例屬性可以放在構造方法__init__()中,也可以在創建實例對象后,進行綁定。
二、舉例說明
我們通過創建一個學生類來進行說明。
class Student1(object):version = 1.0 # 類的公有數據屬性__v = 66 # 類的私有數據屬性# 構造方法里的實例屬性,在類創建實例時自動被調用def __init__(self ,name,score): self.name = name self.score = score # 類的方法屬性,通過類實例化對象訪問def updateScore(self,new_score): self.score = new_scorethen,嘗試通過類對象和實例對象來訪問類的公有數據屬性。對于實例沒有而類有的屬性,會繼續查找類的屬性。
>>> b = Student1('xlp','100') >>> Student1.version # 通過類來訪問類的數據屬性 1.0 >>> b.version # 通過類實例訪問類的數據屬性,打印version屬性 1.0 # 因為實例并沒有該屬性,所以會繼續查找class的version屬性but,當類屬性和實例屬性相同且混用的時候,會出現點問題。
我們先通過類來修改類的數據屬性。修改后,類和實例對象均可訪問。
再通過類實例對象來修改類屬性:
>>>b.version += 0.1 # 試圖通過類對象來修改類屬性 >>>b.version # 效果等同于b.version = Student.version + 0.1 1.2 # 由于實例屬性優先級高于類屬性,因此會屏蔽掉類的version屬性 1.1 >>>Student1.version 1.1 # 此時Student.version仍為1.1其實,在上面實例對象修改類數據屬性時,創建了一個名為version的新實例屬性,覆蓋了類屬性的引用。
但是類本身的數據屬性沒有受到影響,仍存在類域中,可以通過類屬性訪問。
如果將b.version屬性進行刪除del,之后b.version就可以重新訪問類數據屬性了。
所以,實例屬性和類屬性不要使用相同的名字。因為相同名稱的實例屬性將屏蔽掉類屬性。
可以通過實例綁定、訪問實例的屬性,舉例說明:
>>> b.name 'xlp' >>>b.updateSocore(100) # 通過實例訪問類方法屬性 >>>b.score 100但是,但是,但是,當類數據屬性為可變對象時,比如dict類型,情況又會有點不一樣了。例如:
當類屬性為可變對象時,通過實例對象來修改類屬性時,會修改類屬性,且在刪除實例屬性時會報錯。
所以,使用類對象來修改類屬性,不要使用實例對象來修改類屬性。
? thanks for watching, keep on updating...
點個贊再走吧
總結
以上是生活随笔為你收集整理的Python 类的属性与实例属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch 参考指南(介
- 下一篇: Python3 统计 ftp 文件个数和