setattr():表示你可以通过该方法,给对象添加或者修改指定的属性。
delattr():删除某个属性值。
class Info(object): def __init__(self,name,age): self.name=name self.age=age def __setattr__(self, key, value): print("执行--setattr--方法") #如果属性值=name,则赋值为liliz;如果属性值是其他,则可以任意赋值 if key=="name": super().__setattr__(key,"liliz") else: super().__setattr__(key,value) # self.key=value #不能直接赋值,会导致死循环。 def __delattr__(self, item): print("删除属性的方法__delattr__") #如果属性值为name,则pass。如果为其他属性值,则删除该属性。 if item=='name': pass else: super().__delattr__(item) #实例化时,会调用2次的__setattr__方法。为name和age赋值时还会分别调用一次 i=Info("lili",29) i.name="Lucy" i.age=22 print(i.name) # liliz print(i.age) # 22 #删除属性,调用__delattr__方法 del i.age del i.name print(i.name) # Liliz print(i.age) # 被删除, 'Info' object has no attribute 'age'
输出结果:
备注:
因为重写了__setattr__方法,所以在对属性赋值时只会调用该方法,但是该方法内没有具体的行为,需要再调用父类的方法才能进行赋值操作。