class tracer(object):
def __init__(self, func):
self.calls = 0
self.func = func
def __call__(self, *args, **kwargs):
self.calls += 1
print('call %s to %s' % (self.calls, self.func.__name__))
return self.func(*args, **kwargs)
def __get__(self, instance, owner):
def wrapper(*args, **kwargs):
print('wrapper:args=%s ,kwargs=%s'% (args,kwargs))
return self(instance, *args, **kwargs)
return wrapper
class Person:
def __init__(self, name, pay):
self.name = name
self.pay = pay
@tracer
def giveRaise(self, percent):
self.pay *= (1.0+percent)
print("pay=",self.pay)
bob = Person('Bob Smith', 50000)
bob.giveRaise(.10)
上面代码的输出如下:
wrapper:args=(0.1,) ,kwargs={}
call 1 to giveRaise
pay= 55000.00000000001
我的问题是:wrapper 方法是在__get__方法内定义的,但是__get__方法并没有接收参数(*args, **kwargs),为何 wrapper 方法的(*args, **kwargs)参数会有值呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.