在 Python 中,object() 和类 myClass(object) 之间的__dict__差异



我弄乱了动态属性,我注意到如果我直接从 object() 类创建对象,我无法使用 __dict__ 属性,但如果我创建一个作为对象的直接后代的新类,我可以访问 __dict__ 属性。为什么会有差异?

例子:

# This gives an AttributeError  
o = object()
o.__dict__
# This works: prints {}
class myClass(object):
    pass
o = myClass()
o.__dict__
object

用C实现的,没有__dict__属性。(并非所有 Python 对象都有它;__slots__查找)。

我不完全确定为什么它适用于您的类而不是原始的object类。我假设当你的类被初始化时,它会创建__dict__。

使用此代码:

class Test(object):
    def __init__(self):
        pass
def main():
    print 'OBJECT:', dir(object())
    print
    print 'TEST:', dir(Test())
    return

想出了这个输出:

OBJECT: ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__']
TEST: ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__']

如您所见,__dict__、__module__ 和 __weakref__ 位于 Test 对象中,而不是基本对象中

最新更新