Discuss / Python / 交作业&求教

交作业&求教

Topic source

水滴竹沙

#1 Created at ... [Delete] [Delete and Lock User]
在此插入代码
class Chain(object):
    def __init__(self, path=''):
        self._path = path
    def __getattr__(self, path):
        if path == 'users':
            return lambda x : Chain('%s/%s/:%s' % (self._path,path, x)) 
        return Chain('%s/%s' % (self._path, path))
    def __str__(self):
        return self._path
    __repr__ = __str__

运行结果:

Chain().users('michael').repos /users/:michael/repos

但是: 对于Chain().users.repos及Chain().users().repos并不能得到/users/repos,此时users已变成方法,要么提示是Function,要么提示缺少参数

问题,如何修改可以同时满足Chain().users('michael').repos,Chain().users.repos,Chain().users().repos

可以在类中定义users方法,把参数输入给类。


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__
     def users(self,n):
         self._user=n
         return Chain('%s/%s' % (self._path,self._user))

解决方法:给lambda的x设置默认的参数

class Chain(object):
    def __init__(self, path=''):
        self._path = path
    def __getattr__(self, path):
        if path == 'users':
            return lambda x='' : Chain('%s/%s/:%s' % (self._path,path, x)) 
        return Chain('%s/%s' % (self._path, path))
    def __str__(self):
        return self._path
    __repr__ = __str__

  • 1

Reply