python的__getattr__方法

#wrpme包装类

class wrapme:
    def __init__(self,obj):
        self.__data = obj
    def get(self):
        return self.__data
    def __repr__(self):
        return str(self)
    def __str__(self):
        return str(self.__data)
    def __getattr__(self,arrt):  
        return getattr(self.__data, arrt) #调用getattr,返回包装的数据的arrt属性
    
com = wrapme(3 + 5j)
print (com.real) #调用__getattr__方法,查找实例的real属性
#com.some_attribute  #字典里没有some_attribute属性.查找失败,抛出AttributeError异常

def foo():
    print ("属性可以是数据属性,还可以是函数方法")  
    
class test():
    def __init__(self):
        pass
    def __getattr__(self, arrt):   
        return foo #所有属性都被重定向到了foo方法
    

t = test()

t.some_attribute()  #通过__getattr__,在实例的属性字典里查打some_attribute属性


#结论: 像t.some_attribute() 一个实例调用子函数some_attribute,是通过__getattr__方法的在字典里查打的,这个属性可以是某数据.或者是函数方法,反正是Python的某个对象就是了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值