zoukankan      html  css  js  c++  java
  • CLASS 类 __getattr__

    class Chain(object):
    def __init__(self, path=''):
    self._path = path
    def __getattr__(self, path):
    return Chain('%s/%s' % (self._path, path))
    def __str__(self):
    return self._path
    __repr__ = __str__

    #A =Chain()
    print(Chain().status.user.timeline.list) #与下面代码效果一样,从左到右一个个的执行的
    print((((Chain().status).user).timeline).list)

    #第一次初始化方法没有传递path的值,默认参数为'', 查找没有status这个属性,然后执行 __getattr__这个方法把status当做参数传到__getattr__中,然后返回Chain('/status')
    #第二次初始化方法传递path的值为‘/status',查找没有user这个属性,然后执行 __getattr__这个方法把user当做参数传到__getattr__中,然后返回Chain('/status/user')
    #第三次初始化方法传递path的值为/status/user',查找没有timeline这个属性,然后执行 __getattr__这个方法把timeline当做参数传到__getattr__中,然后返回Chain('/status/user/timeline')
    #以此类推,最后是 Chain('/status/user/timeline/list') 然后调用 __str__()方法返回self._path


    # 先执行Chain().status然后再执行后面的.user执行完后再执行后面的.timeline,然后再执行.list

    执行结果:
    /status/user/timeline/list
    /status/user/timeline/list

    说明:
    当调用不存在的属性时,比如score,Python解释器会试图调用__getattr__(self, 'score')来尝试获得属性

    参考:
    https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319098638265527beb24f7840aa97de564ccc7f20f6000
  • 相关阅读:
    HashMap原理
    高并发架构系列:MQ消息队列的12点核心原理总结
    大话程序员系列:一张图道尽程序员的出路
    java面试题
    SpringBoot框架的使用
    java开发定时任务执行时间
    OpenLayers 3 扩展插件收集
    Vue-cli webpack模板
    Spring的属性文件properties使用注意
    FullBg-网页图片背景自适应大小
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9646947.html
Copyright © 2011-2022 走看看