我上课了。该类包含一个函数。我希望每隔一段时间以相同的方式更改此功能。如果我使用lambda,我会得到无限的递归。我明白为什么会这样,我想找到一个优雅的解决方案。
def func(s):
return 1 # some not interesting function
class cls: # a class
def __init__(self , f):
self.f = f
c = cls(func)
c.f = lambda x: c.f(x) + 1 # i want c.f to return c.f(x) + 1
print(c.f(1)) # causes infinite recursion
我不想做
c.f = lambda x: func(x) + 1
因为我想以同样的方式多次更改c.f
。
答案 0 :(得分:7)
无限递归正在发生,因为在lambda函数中,c.f
在调用时被解析,因此它已经是“新”lambda
函数而不是传递给{{1}的原始函数}。
你可以做这样的事情:
cls.__init__
由于在创建lambda函数时会计算参数default,因此它将是该类的原始函数。