Python:setattr 和 delatrr 方法

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

原文地址:https://www.cnblogs.com/test123/p/14202234.html