Python 類屬性與執行個體屬性的關聯

來源:互聯網
上載者:User

標籤:

類屬性是屬於一個類的變數,就像是C++中類的靜態成員變數,你只需將該屬性定義在所有方法的範圍外,即為類屬性,但一般是緊跟在類名後面,類屬性為所有執行個體所共有,你可以通過 類名.屬性 來調用類屬性

>>> class A:      count = 0; #這就是類屬性      def __init__(self):          A.count += 1  #每次調用該方法 count 自增 1      def output(self):          print(self.count)    >>> a1 = A()  >>> a1.output()  1  >>> A.count = 0  >>> A.count  0  >>> a1.output()  (為什麼會是0,後面會詳細說明)0

執行個體屬性是屬於執行個體自己的屬性,你可以在任何方法中添加新的執行個體屬性,甚至在類外添加,Python會在執行個體屬性初次使用時,建立該屬性並賦值

>>> class A:      def __init__(self):          self.num = 1  #添加執行個體屬性num      def again(self,name):          self.name = name #添加執行個體屬性name              >>> a1 = A()  >>> a1.num  1  >>> a1.name #這時執行個體 a1 中還沒有執行個體屬性 name  Traceback (most recent call last):    File "<pyshell#38>", line 1, in <module>      a1.name #這時執行個體 a1 中還沒有執行個體屬性 name  AttributeError: ‘A‘ object has no attribute ‘name‘  >>> a1.again(‘Jane‘)  >>> a1.name #現在有了...  ‘Jane‘  >>> a1.call = ‘123456‘ #添加a1的執行個體屬性 call  >>> a1.call  ‘123456‘

繼續看下面的例子:

[python] view plaincopy>>> class A:      count = 0      def __init__(self):          A.count += 1      def output(self):          print(self.count)              >>> a1 = A()  >>> a2 = A()  >>> a3 = A()  >>> A.count # A的類屬性count這時為3  3  >>> A.count = 2 #更改A的類屬性為2  >>> a1.count,a2.count, a3.count, A.count #A的所有執行個體的count也同樣改變  (2, 2, 2, 2)  >>> a1.count = 5 #通過A的一個執行個體a1更改count  >>> a1.count, a2.count, a3.count, A.count #只有a1的count發生改變  (5, 2, 2, 2)  >>> A.count = 4 #再次更改A的類屬性為4  >>> a1.count, a2.count, a3.count, A.count  #這時a1的count還是保持為5  (5, 4, 4, 4)

解釋為什麼會是0?

先看代碼:

class base:    count = 0    def __init__(self):        base.count += 1    def output(self):        print(self.count)a1 = base()a2 = base()a3 = base()print(base.count) # 3a1.output() # 3  這裡執行個體屬性與類仍然還是共同引用一個count對象base.count += 4a1.output() # 3+4print(base.count) # 3print(a1.count) # 3 同理,共同引用一個count對象base.count = 0 當改變類屬性count時,執行個體屬性count也跟著會變化print(a1.count) # 0
class base:    count = 0    def __init__(self):        base.count += 1    def output(self):        print(self.count)a1 = base()a2 = base()a3 = base()print(base.count) # 3a1.count = 9  這個執行個體屬性從類屬性中分離出去base.count += 4 因此類屬性count的改變不會影響到執行個體屬性countprint(base.count) # 7print(a1.count) # 9print(base.count) # 3a1.count = 9base.count += 4print(base.count) # 7a1.output() # 9

通過上面的例子我們可以看到,類屬性為所有執行個體和類所共有,通過 類名.類屬性 可以更改類屬性,並且所有執行個體的類屬性也隨之改變,但通過 執行個體名.類屬性 來改變類屬性,該執行個體的該類屬性會變為執行個體屬性,而不影響其他執行個體的類屬性,以後通過 類名.類屬性 來更改類屬性,也不會影響到該執行個體的這個屬性了,因為它變為執行個體屬性啦。



Python 類屬性與執行個體屬性的關聯

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.