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
  • 相关阅读:
    (三)索引分区知识详解
    (二)SQL Server分区创建过程
    (一)SQL Server分区详解Partition(目录)
    表格重新加载 where 携带上次值问题
    MongoDB 时差问题问题
    WebAPI跨域处理
    Http请求中 content-type 和 dataType 区别
    那些坑
    微信公众平台开发系列一 ~ 接入前的配置工作
    MVC中登录页图片验证码总结
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9646947.html
Copyright © 2011-2022 走看看