我弄乱了动态属性,我注意到如果我直接从 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 对象中,而不是基本对象中