面向对象知识补充1
1、__setattr__
1、__setattr__:对属性赋值或修改时候被调用
class Foo: def __init__(self,name): self.name=name def __setattr__(self, key, value): print('触发了__setattr__') a = Foo('zjh') a.t=2 print(a.__dict__) # 输出结果
触发了__setattr__
触发了__setattr__
{}
从上面结果可以看出,当我们设置属性或者给属性赋值的时候,会调用__setattr__的执行。但为什么对象f的名称空间没有我们设置的name和x两个变量呢?原因是:因为你重写了__setattr__功能,对它并没有进行任何操作,仅仅只有一条语句,而默认的__setattr__会将属性按照键值对写入对象的名称空间。如果自己重写了__setattr__,但是又没有进行任何操作,要想完成对象属性的赋值操作,必须得通过以下方式才能实现:
a.__dict__['name']='zjh' print(a.name) # 输出结果 zjh
参考博客链接: 链接点这
2、__getattr__:只有在调用属性时且属性不存在的情况下,触发这个函数执行.
3、__delattr__:当删除一个对象的属性值时,会触发delattr的执行。