I was messing around with dynamic attributes and I noticed I could not use the __dict__ attribute if I created the object directly from the object() class but if I create a new class that i开发者_高级运维s a direct descendent of object I can access the __dict__ attribute. Why the difference?
Examples:
# This gives an AttributeError o = object() o.__dict__
# This works: prints {}
class myClass(object):
pass
o = myClass()
o.__dict__
object
is implemented in C and doesn't have a __dict__
attribute. (Not all Python objects have it either; look up __slots__
).
I'm not entirely sure why it works for your class but not the original object
class. I'd assume that when your class get initialized, it creates __dict__.
Using this code:
class Test(object):
def __init__(self):
pass
def main():
print 'OBJECT:', dir(object())
print
print 'TEST:', dir(Test())
return
Came up with this output:
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__']
As you can see, __dict__, __module__, and __weakref__ are in the Test object but not the base object
精彩评论