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
  • 相关阅读:
    python(三):python自动化测试定位
    python(二):用python抓取指定网页
    python(一):介绍网络爬虫
    oracle批量增加数据
    oracle数据库基本操作
    web安全测试要点
    linux下安装jdk、tomcat
    在linux上编译C
    linux基本操作
    对首次性能测试的总结与思考
  • 原文地址:https://www.cnblogs.com/lighthouse/p/9646947.html
Copyright © 2011-2022 走看看