繁体   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