[英]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.