为什么我的实例变量不在__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__中看到类级别的属性