在Python中对象()和类myClass(对象)之间__dict__的区别

时间:2011-05-10 18:34:09

标签: python

我正在搞乱动态属性,我注意到如果我直接从object()类创建对象,我就不能使用__dict__属性但是如果我创建一个新的类,它是对象的直接后代,我可以访问__dict__属性。为什么不同?

示例:

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

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:1)

我不完全确定为什么它适用于您的班级而不是原来的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对象中,但不在基础对象中