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
  • 相关阅读:
    JS复制内容到剪切板
    mysql root密码的重设方法(转)
    php生成excel文件示例代码(转)
    php读取文件内容的三种方式(转)
    使用火蜘蛛采集器Firespider采集天猫商品数据并上传到微店
    Mac Android8.0源码编译笔记
    开源 高性能 高可用 可扩展
    开源 模式
    开源 算法 数据结构
    mdb
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9646947.html
Copyright © 2011-2022 走看看