【发布时间】:2020-03-14 03:39:43
【问题描述】:
我试图了解在下面的装饰器中返回 lambda 与方法的区别。返回 m.fm 时,调用对象实例“o”丢失且未由装饰器传递。装饰器将在返回 lambda 函数时传递实例。是否可以通过在装饰器中返回方法来传递调用对象?
def deco(*type):
def wrapper(func):
m = M()
# return lambda callingobj, *args: m.fm(callingobj, *args)
return m.fm
return wrapper
class M(object):
def fm(self, callingobj, *args):
print(f'self_ {callingobj}, args {args}')
class O(object):
@deco('int')
def fo(self, *args):
print(f'{args}')
o = O()
o.fo(1, 2, 3)
输出:
-
return lambda callingobj, *args: m.fm(callingobj, *args)callingobj <__main__.O object at 0x000002453BE95760>, args (1, 2, 3) -
return m.fmcallingobj 1, args (2, 3)
【问题讨论】: