Discuss / Python / 打卡,最开始自己尝试了一下 ,

打卡,最开始自己尝试了一下 ,

Topic source

发现python在Chain().users('michael').repos这段代码时,python解释器首先运行Chain.user返回一个Chain()对象,假设为s,再解释运行s('michael'),这相当于对对一个实例对象进行调用,也就是教程中说的可以把对象看作一个函数,故要实现__call__()方法。我觉得这样更符合动态调用的写法,如果下次调用的时候用Chain().name('Bob').repos,不然又要对name进行判断改写代码:

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

    def __call__(self,path=''):

        return Chain('%s/%s' %(self._path,path))

    __repr__ = __str__


  • 1

Reply