ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:setattr 和 delatrr 方法

2020-12-28 16:32:40  阅读:323  来源: 互联网

标签:__ name setattr Python age delatrr self 属性


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

 

标签:__,name,setattr,Python,age,delatrr,self,属性
来源: https://www.cnblogs.com/test123/p/14202234.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有