日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 类的属性与实例属性

發布時間:2025/5/22 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_score

then,嘗試通過類對象和實例對象來訪問類的公有數據屬性。對于實例沒有而類有的屬性,會繼續查找類的屬性。

>>> b = Student1('xlp','100') >>> Student1.version # 通過類來訪問類的數據屬性 1.0 >>> b.version # 通過類實例訪問類的數據屬性,打印version屬性 1.0 # 因為實例并沒有該屬性,所以會繼續查找class的version屬性

but,當類屬性和實例屬性相同且混用的時候,會出現點問題。
我們先通過類來修改類的數據屬性。修改后,類和實例對象均可訪問。

>>>Student1.version += 0.1 >>>Student1.version # 或者b.version 1.1

再通過類實例對象來修改類屬性:

>>>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就可以重新訪問類數據屬性了。

>>>del b.version # 刪除實例屬性 >>>b.version # 由于實例的version屬性沒有找到,類的屬性就顯示出來了 1.1

所以,實例屬性和類屬性不要使用相同的名字。因為相同名稱的實例屬性將屏蔽掉類屬性。

可以通過實例綁定、訪問實例的屬性,舉例說明:

>>> b.name 'xlp' >>>b.updateSocore(100) # 通過實例訪問類方法屬性 >>>b.score 100

但是,但是,但是,當類數據屬性為可變對象時,比如dict類型,情況又會有點不一樣了。例如:

當類屬性為可變對象時,通過實例對象來修改類屬性時,會修改類屬性,且在刪除實例屬性時會報錯。
所以,使用類對象來修改類屬性,不要使用實例對象來修改類屬性。


? thanks for watching, keep on updating...
點個贊再走吧

總結

以上是生活随笔為你收集整理的Python 类的属性与实例属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。