如果我创建一个类a
,如下所示:
class A:
def __init__(self):
self.name = A
检查__dict__
成员看起来像{name:A}
但是,如果我创建了一个类B
:
class B:
name = B
__dict__
为空。
两者之间的区别是什么?为什么t<code>name</code>会出现在<code>B</code<s<code>__dict__</code>中?
如果我创建一个类a
,如下所示:
class A:
def __init__(self):
self.name = A
检查__dict__
成员看起来像{name:A}
但是,如果我创建了一个类B
:
class B:
name = B
__dict__
为空。
两者之间的区别是什么?为什么t<code>name</code>会出现在<code>B</code<s<code>__dict__</code>中?
<code>B.name</code>是一个类属性,而不是实例属性。它显示在<code>B中__dict__,但不在b=b()中;b.__dict__
。
这种区别在某种程度上被掩盖了,因为当您访问实例上的属性时,类dict是一种回退。因此,在上面的例子中,<code>b.name</code>将为您提供<code>b.name</code>的值。
class A:
def _ _init_ _(self):
self.name = A
a = A()
在类型为a的对象实例a上创建一个属性,因此它可以在:<code>a中找到__格言__
class B:
name = B
b = B()
在类B上创建一个属性,该属性可以在<code>B中找到__dict__或者,如果您有一个类型为b的实例b,您可以在b中看到类级别的属性__类别____格言__