Discuss / Python / 两种方式实现#GET /users/:user/repos

两种方式实现#GET /users/:user/repos

Topic source

1.lambda表达式

class Chain(object):
	def __init__(self, path=''):
		self._path = path


	def __getattr__(self, path):
		#GET /users/:user/repos
		#调用时更换用户名
		#############################
		if path=='users':
			return lambda x : Chain('%s/%s' % (self._path,x)) 
		return Chain('%s/%s' % (self._path, path))

	def __str__(self):
		return self._path

	__repr__ = __str__

运行结果:/status/Mike/timeline/list

2.__call__()函数

class Chain2(object):
	def __init__(self,path=''):
		self.path=path

	def __getattr__(self,path):
		if path=='users':
			return Chain2('%s' % (self.path))
		return Chain2('%s/%s' % (self.path,path))

	def __call__(self,username):
			return Chain2('%s/%s' %(self.path,username))
	
	def __str__(self):
		return self.path

	__repr__=__str__

运行结果:/status/Mike/timeline/list

关于这个函数,有大佬知道如何判断确定是users的参数后,才调用__call__的吗

我的结果:self_path里面是不包含users的


  • 1

Reply