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

  • 相关阅读:
    卡特兰数
    Tree
    关于树上DP的转移方式与复杂度证明
    Tarjan进阶
    排队
    Perm 排列计数
    [bzoj1227]虔诚的墓主人
    [BZOJ1195]最短母串
    ValueError: Variable vgg_16/conv1/conv1_1/weights already exists, disallowed
    《链家网技术架构的演进之路》读后感
  • 原文地址:https://www.cnblogs.com/test123/p/14202234.html
Copyright © 2011-2022 走看看