python __getattribute__、__getattr__、__setattr__魔法方法详解

__getattribute__、__getattr__、__setattr__魔法方法详解

__getattribute__和__getattr__

  • 使用__getattribute__和__getattr__ 控制实例对象获取值
# 创建类
class A:
    x = 250

    def __getattribute__(self, item):
        print(item, "getattribute -> 运行")
        return super().__getattribute__(item)

    def __getattr__(self, item):
        print(item, "getattr-> 运行")
        return ''
  • 运行示例
a = A()
# 当获取实例对象的属性时会先触发__getattribute__方法
print(getattr(a, 'x', 1))
print("=" * 50)
# 当__getattribute__没有找到实例对象的属性时才会运行 __getattr__ 方法
print(getattr(a, 'a', 1))
print("=" * 50)
print(a.a)
print("获取类属性不会触发__getattribute__", "=" * 50)
print(A.x)

输出=======================================================================================
x getattribute -> 运行
250
==================================================
a getattribute -> 运行
a getattr-> 运行

==================================================
a getattribute -> 运行
a getattr-> 运行

==================================================
250

__setattr__

  • __setattr__ 设置对象属性时才会运行
# 创建类
class A:
    def __setattr__(self, key, value):
        print(key, value, "开始设置对象属性")
        super().__setattr__(key, value)
  • 示例
a = A()
a.x = 250
print(a.x)

输出==========================================================================
x 250 开始设置对象属性
250
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值