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

2019-01-24  本文已影响0人  fordG
a = ("123")
print(a)

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

Done
上一篇下一篇

猜你喜欢

热点阅读