我正在搞乱动态属性,我注意到如果我直接从object()类创建对象,我就不能使用__dict__属性但是如果我创建一个新的类,它是对象的直接后代,我可以访问__dict__属性。为什么不同?
示例:
# This gives an AttributeError o = object() o.__dict__
# This works: prints {}
class myClass(object):
pass
o = myClass()
o.__dict__
答案 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对象中,但不在基础对象中