美文网首页
python3 定制类的学习记录(REST API, url)

python3 定制类的学习记录(REST API, url)

作者: fordG | 来源:发表于2019-01-24 16:15 被阅读0次
    a = ("123")
    print(a)
    
    • 这段代码在pycharm中,利用debug模式发现a = '123', 说明()可以返回里面的结果。
    
    class Chain(object):
        def __init__(self, path=''):
            self.path = path
    
        def __getattr__(self, item):
            return Chain('%s/%s' % (self.path, item))
    
        def __str__(self):
            return self.path
        __repr__ = __str__
    
        def __call__(self, path):
            return Chain('%s/%s' % (self.path, path))
        
    print(Chain().python.learn.oop.username('ford'))
    
    

    这是一个REST API的小例子,引用来自这里

    结果 /python/learn/oop/username/ford

    记录下此处的理解:
    Chain()实例了一个Chain对象,
    str重写了之后,可以直接打印对象,返回并输出self.path(默认空的路径),
    此时Chain()调用完这个对象的self.path='',
    然后 .python调用时没有python属性
    进入getattr中返回/python
    以此类推,再次调用Chain()并且改变self.path得值......../python/learn/oop,username('ford')此处可以拆分username也是一个属性和('ford')分开,会得到/python/learn/oop/username,返回一个Chain()对象 类(),
    类调用和函数调用类似,实现call就可以 类() 了。

    Chain().python.learn.oop.username返回了一个Chain()对象, 类中实现了call, 此时传入的参数ford对应的是def call(self, path):中的path
    最后返回的一个总路径就是 /python/learn/oop/username/ford

    • 一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法call()

    • getattr函数的作用: 如果属性查找(attribute lookup)在实例以及对应的类中(通过dict)失败, 那么会调用到类的getattr函数, 如果没有定义这个函数,那么抛出AttributeError异常)

    Done

    相关文章

      网友评论

          本文标题:python3 定制类的学习记录(REST API, url)

          本文链接:https://www.haomeiwen.com/subject/qzxujqtx.html