为什么我的实例变量不在__dict__中?
时间:2020-03-05 18:45:23 来源:igfitidea点击:
如果我按如下方式创建类" A":
class A: def __init__(self): self.name = 'A'
检查__dict__
成员看起来像{'name':'A'}
但是,如果我创建一个类" B":
class B: name = 'B'
__dict__
是空的。
两者之间有什么区别,为什么name
不会显示在B
的__dict__
中?
解决方案
回答
B.name是一个类属性,而不是实例属性。它显示在B .__ dict__
中,而不显示在b = B();中。 b .__ dict__
。
这种区别在某种程度上被掩盖了,因为当我们访问实例上的属性时,类dict是一个后备。因此,在上面的示例中," b.name"将为我们提供" B.name"的值。
回答
class A: def _ _init_ _(self): self.name = 'A' a = A()
在类型为A的对象实例a上创建一个属性,因此可以在" a .__ dict__"中找到
class B: name = 'B' b = B()
在类B上创建一个属性,该属性可以在B .__ dict__
中找到,或者,如果我们具有类型B的实例b,则可以在b .__ class __.__ dict__
中看到类级别的属性