簡體   English   中英

類屬性的繼承?

[英]Inheritance of class attributes?

有人可以提供詳細解釋為什么會發生這種情況嗎? 在這種情況下,Python編譯器如何創建類變量?

class A(object):
    x = 1
    y = x + 1

class B(A):
    x = 10

>>> B.x
10
>>> B.y
2  # ---> I was expecting 11 here, why does this y still uses the A's value?

因為類變量是同時評估的,所以類本身也是評估的。 這里的事件的序列是: A定義並在它的值被設定,因此x是1和y是2。然后B定義,且x在條目B設置為10。然后訪問By ,並且由於B沒有y條目,它檢查其父類。 它的確在A中找到y條目,其值為2 y僅定義一次。

如果確實需要這樣的變量,則可能需要定義一個類方法。

class A:
    x = 1

    @classmethod
    def y(cls):
        return cls.x + 1

class B(A):
    x = 10

>>> B.y()
11

這是因為y是屬於A的類屬性,因此在B的類實例中更改x的值不會更改y的值。 您可以在文檔中閱讀有關此內容的更多信息: https : //docs.python.org/2/tutorial/classes.html#class-objects

它不會那樣做。

>>> class A(object):
...     x = 1
...     y = x + 1
...
>>> class B(object):
...     x = 10
...
>>> B.x
10
>>> B.y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'B' has no attribute 'y'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM