import types
from functools import wraps
class profiled:
def __init__(self,func):
wraps(func)(self)
def __call__(self,*a,**k):
print("profiled.call")
return self.__wrapped__(*a,**k)
def __get__(self,instance,cls):
if instance is None: return self
foo=types.MethodType(self,instance)
print("profiled.get:",foo)
return foo
class spam:
@profiled
def bar(self,x):print(x)
if name == 'main':
s=spam()
print(s.__dict__,spam.__dict__,'\n')
f=s.bar
print(f,type(f),f.__dict__,sep='\n')
f("TEST") #f 已经是绑定的方法了,为什么还要调用__call__()
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.