码迷,mamicode.com
首页 > 编程语言 > 详细

Python:setattr 和 delatrr 方法

时间:2021-01-01 12:48:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:输出   重写   mic   com   http   image   att   循环   elf   

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

 

Python:setattr 和 delatrr 方法

标签:输出   重写   mic   com   http   image   att   循环   elf   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!