在python中通过self暴露的类级变量

时间:2013-11-07 17:06:25

标签: python

class ClassA:
    A = 10
    def __init__(self):
        self.a = 10
        self.b = 20

    def methodA(self):
        return self.A

 obj = ClassA()
 print(obj.methodA()) # returns 10

这明显具有限制,其中,obj将不具有名称“A”的属性。但是为什么python会通过self.A暴露'A'。最好将其作为ClassA.A返回吗?

1 个答案:

答案 0 :(得分:3)

这完全是设计上的。

类上的方法也是类的属性(虽然也被descriptors增强)。这也是self.methodA()的定位。

Python首先在实例上搜索属性,然后是类,然后是类的基类。

请注意,设置 self.A仍会在实例上设置值,从而屏蔽class属性。这允许类指定属性的默认值,稍后将替换为实例上的值。

这一切并不妨碍您直接访问ClassA.A并绕过实例字典。如果您想更改共享值,则必须由于上述原因直接分配给ClassA.A