Skip to main content
 首页 » 编程设计

python之类属性的继承

2025年05月04日24langtianya

有人可以详细解释为什么会这样吗?在这种情况下,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 被定义,并且 B 中的 x 条目被设置为 10。然后你访问 B.y,并且因为那里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