类的内置attr属性(__getattr__、__setattr__、__delattr__)

本文详细介绍了Python中类的__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查看对象的内置属性

 

转载于:https://www.cnblogs.com/dangrui0725/p/9465459.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值