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__方法,所以在对属性赋值时只会调用该方法,但是该方法内没有具体的行为,需要再调用父类的方法才能进行赋值操作。