__getattr__的用法

"""
__getattr__的用法:
__getattr__()是仅当属性不能在实例的__dict__或它的类(类的__dict__),
或父类其__dict__中找到时,才被调用。一般在代码中包含一个对getattr()
內建函数的调用每一个类都会用一个字典,把它包含的属性放到自己的字典
里(这是内建的),

"""

class Preson:

    def __init__(self):
        pass

    def main(self):
        print u"出门"

    def say(self):
        print u'今天天气真的很不错'



class Decorate:

    def __init__(self,event):
        self.event = event

    #装饰作用
    def main(self):
        print u'我穿着漂亮的衣服'
        self.event.main()

    #实例化对象时候在对象中找不到相应的方法,才会调用这个方法
    def __getattr__(self,name):
        return self.fun
        #可以使用下面的方法调用Preson的属性
        #return getattr(self.event,name)

    def fun(self):
        print u'找不到方法才调用了我'

if __name__ == '__main__':
    p = Preson()
    d = Decorate(p)
    d.main()
    d.say()

#输出如下>>>
#我穿着漂亮的衣服
#出门
#找不到方法才调用了我




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值