2014-09-03 40 views
0

为什么在Python中为每个类实例动态定义一个新的属性是可能的,只要它不是object类型?在Python中动态定义新的实例属性

class NewStyle(object): 
    pass 

class OldStyle: 
    pass 

a = object() 
# This line raises AttributeError 
a.foo = 1 

# All of these work fine 
a = Exception() 
a.foo = 1 

a = OldStyle() 
a.foo = 1 

a = NewStyle() 
a.foo = 1 

这种行为似乎是相同的在Python 3

回答

2

the python doc

注:object没有__dict__,所以你不能指定任意属性的一个实例object类。

某些类定义提供__dict__属性,然后默认情况下它将包含在实例中。

又见__slots__

+0

哪里的默认实现__dict__,来自如果不从'object'? – reish 2014-09-03 13:48:05