学习版本3.6.4
1.当一个类的对象不含有__slots__的类可以随时给类添加属性或方法
2.当一个类的对象有__slots__属性时候且__slots__的元素不包含‘__dict__’时候,只能声明与__slots__中的元素同名的属性或方法。
3.当一个类的对象有__slots__属性且__slots__的元素中包含'__dict__'时候,跟1一样能给类添加任意名字的属性或方法。
注意,类随时都能添加属性或方法
class A(object):
name = 'A'
class B(object):
name = 'B'
__slots__ = ['a', 'b']
class C(object):
name = 'C'
__slots__ = ['a', 'b', '__dict__']
def testObj(myobj):
try:
myobj.c = 10
print(myobj.c)
except Exception as e:
print('error: '+myobj.name)
print(str(e))
if __name__ == '__main__':
testObj(A())
testObj(B())
testObj(C())
运行结果:
10
error: B
'B' object has no attribute 'c'
10