zoukankan      html  css  js  c++  java
  • 类的内置attr属性(__getattr__、__setattr__、__delattr__)

    # 类的内置attr属性
    
    class Foo:
        x = 1
    
        def __init__(self, y):
            self.y = y
    
        def __getattr__(self, item):  # 当实例调一个不存在的属性时才触发此方法
            print('执行__getattr__,你查找的属性【%s】不在在' % item)
    
        def __setattr__(self, key, value):  # 当添加或修改实例的属性时,会触发此方法
            self.__dict__[key] = value
            # self.key = value # 不能使用这样的写法,因为此处设置了值,所以又会调用__setattr__这个方法,最后就无限递归
            print('执行__setattr__')
    
        def __delattr__(self, item):  # 当删除实例的属性时,会触发此方法
            self.__dict__.pop(item)
            # del self.item  # 不能使用这样的写法,因为此处删除了属性,所以又会调用__delattr__这个方法,最后就无限递归
            print('执行__delattr__')
    
    
    f1 = Foo(10)  # 对实例添加了属性,所以会执行__setattr__
    print(f1.y)  # 10
    print(getattr(f1, 'y'))  # 10
    
    f1.ssssssss  # 实例没有ssssssss这个属性,所以会执行 __getattr__
    
    f1.a = 100  # 对实例添加了属性,所以会执行__setattr__
    f1.y = 100  # 对实例修改了属性,所以会执行__setattr__
    
    del f1.y  # 删除了实例的y属性,所以会执行__delattr__
    
    # 对于上述三个attr的属性,系统本身已经定义好了,如果我们自己编写,表示重写了系统原有的
    # 一般只是__getattr__用的较多,其它两个属性用的比较少
    
    print(dir(f1))  # 通过dir查看对象的内置属性
  • 相关阅读:
    网络流与线性规划24题 之 餐巾计划问题
    待刷题目分类(一)
    bzoj1787 [Ahoi2008]Meet 紧急集合
    Hoj2634 How to earn more?
    poj3281 Dining
    浅谈数论(三)水仙花数
    poj1637 Sightseeing tour
    动态规划的思考(1)
    网络流-最大流问题 ISAP 算法解释(转自Renfei Song's Blog)
    poj1273 Drainage Ditches
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9465459.html
Copyright © 2011-2022 走看看