也许我完全错了但是我遇到了lambda调用@classmethod的一些奇怪问题.
我有以下课程:
class MyClass:
LAMBDA = lambda: MyClass.ClassMethod()
@classmethod
def ClassMethod(cls):
pass
Run Code Online (Sandbox Code Playgroud)
但是每当调用LAMBDA时,这都会失败:
TypeError: unbound method <lambda>() must be called with MyClass instance as first argument (got nothing instead)
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么会这样.我已经花了一些时间试图让它工作.我需要一些由该lambda填充的类属性,并且在该阶段显然不可能自引用该类.
您必须明白,您的代码完全等同于
class MyClass:
def LAMBDA():
return MyClass.ClassMethod()
@classmethod
def ClassMethod(cls):
pass
Run Code Online (Sandbox Code Playgroud)
那么,你显然称其为MyClass.LAMBDA()。但是看,LAMBDA 是一个实例方法。而且您在没有实际实例的情况下调用它。
你到底想做什么?
我认为,如果您要为 lambda 构造命名,您不妨以“正常”方式声明它 - def。根据我的经验,只有少数孤立的情况下使用lambdas实际上有助于提高代码质量。