如果我创建一个类A
如下:为什么我的实例变量不在__dict__中?
class A:
def __init__(self):
self.name = 'A'
检查的__dict__
成员看起来像{'name': 'A'}
然而,如果我创建一个类B
:
class B:
name = 'B'
__dict__
是空的。
是什么两者之间的区别,以及为什么在B
的__dict__
不name
显示出来?
如果我创建一个类A
如下:为什么我的实例变量不在__dict__中?
class A:
def __init__(self):
self.name = 'A'
检查的__dict__
成员看起来像{'name': 'A'}
然而,如果我创建一个类B
:
class B:
name = 'B'
__dict__
是空的。
是什么两者之间的区别,以及为什么在B
的__dict__
不name
显示出来?
B.name
是一个类属性,而不是一个实例属性。它出现在B.__dict__
,但不在b = B(); b.__dict__
。
这个区别在某种程度上被掩盖了,因为当你访问一个实例的属性时,类字典是一个后备。所以在上面的例子中,b.name
会给你B.name
的值。
class A:
def _ _init_ _(self):
self.name = 'A'
a = A()
创建对类型A的对象实例的一个属性,它因此可以找到:a.__dict__
class B:
name = 'B'
b = B()
创建在B类的属性和属性可以在B.__dict__
替代地发现如果您有B类型的实例b,您可以在b.__class__.__dict__