关于python:为什么实例变量不在__dict__中?

关于python:为什么实例变量不在__dict__中?

Why is my instance variable not in __dict__?

如果我按如下方式创建类A

1
2
3
class A:
    def __init__(self):
        self.name = 'A'

检查__dict__成员看起来像{'name': 'A'}

但是,如果我创建一个类B

1
2
class B:
    name = 'B'

__dict__为空。

两者之间有什么区别?为什么name没有显示在B__dict__中?


B.name是类属性,而不是实例属性。 它显示在B.__dict__中,而不显示在b = B(); b.__dict__中。

这种区别在某种程度上被掩盖了,因为当您访问实例上的属性时,类dict是一个后备。 因此,在上面的示例中,B.name将为您提供B.name的值。


1
2
3
4
class A:
    def _ _init_ _(self):
        self.name = 'A'
a = A()

在类型为A的对象实例a上创建一个属性,因此可以在以下位置找到它:a.__dict__

1
2
3
class B:
    name = 'B'
b = B()

在类B上创建一个属性,并且可以在B.__dict__中找到该属性;或者,如果您具有类型B的实例b,则可以在b.__class__.__dict__中看到类级别的属性


推荐阅读