python class属性
代码一:
class A(object): pass a = A() a.name = "class_A" print(a.name) #class_A
代码二:
class A(object): __slots__ = {} pass a = A() a.name = "class_A" print(a.name) #AttributeError: 'A' object has no attribute 'name'
代码二会有异常;拥有 __slots__
属性的类在实例化对象时不会自动分配 __dict__
,而 obj.attr
即 obj.__dict__['attr']
, 所以会引起 AttributeError
对于拥有 __slots__
属性的类的实例 Obj
来说,只能对 Obj
设置 __slots__
中有的属性。
代码二改为:__slots__ = {'name'}则正常运行