Python魔法方法(12):__getattr __(self, item) 方法

27 篇文章 3 订阅
27 篇文章 1 订阅

Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,它们是面向对象的 Python 的一切。它们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了某一个魔法方法,那么这个方法就会在特殊的情况下自动被 Python 所调用。

功能

该方法定义了用户试图访问一个不存在的属性时的行为。

参数

self 指对象本身,item 是一个字符串,代表欲访问属性的名字。

返回值

默认为 None,返回值会自动返回给触发它的对象。

示例

class MyTest:

    def __getattr__(self, item):
        return 18


sample = MyTest()
print(sample.age)
# 使用 '.' 操作符访问对象时触发此方法
print(sample.__dict__)

当 __getattribute__ 和 __getattr__ 同时存在时,会先执行 __getattribute__ 方法,若该方法能正常返回一个值,那么 __getattr__ 方法就不会被执行。若该方法没有正常返回一个值(产生了异常(AttributeError)或属性不存在),则 __getattr__ 方法就会在 __getattribute__ 之后被执行。
__getattr__()函数是特殊函数。它仅当属性不能在实例的 __dict__ 或它的类,或者祖先类中找到时,才被调用。程序员主要用 __getattr__() 来实现类的灵活性,或者用它来做一些兜底的操作。绝大多数情况下,需要的是 __getattr__()。

示例:

class Count(object):
    def __init__(self, min, max):
        self.min = min
        self.max = max
        self.current = None

    def __getattribute__(self, item):
        print(type(item), item)
        if item.startswith('cur'):
            raise AttributeError
        return object.__getattribute__(self, item)


obj1 = Count(1, 10)
print(obj1.min)
print(obj1.max)
print(obj1.current)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值