1.实验结果__setattr__中对任何self属性左赋值都将再次调用__setattr__会导致无穷递归循环
所以类中所有有关self的赋值 都要改为self.__dict__[" "] 形式
2.在原先属性赋值时 如self.name self.__dict__[""] 中括号里必须为必须为'name'字符串形式 否则会认为是变量 出错
self.name->> self.__dict__['name'] 形式
class privatel:
def __init__(self,x):
self.__dict__['name']=x#字典中 __init__的属性必须写成字符串形式 不再是原来的点变量形式
def __setattr__(self, key, value):
if key=='age':
self.__dict__[key]=value# setattr必须用字典赋值否则导致循环
else:
raise AttributeError(key+"不被允许")
if __name__=='__main__':
x=privatel('小明')
x.age=19
print(x.age)
x.dnhso="小红"
正常会抛出此结果