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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值