分配lambda作为方法:self未通过?



我想在类对象中创建一个方法(取决于某些条件)。当我在类(m2)中创建lambda以及当我将现有方法分配给类属性(m3)时,这是有效的,但当我将lambda分配给类属性(m1)时则不适用。在这种情况下,lambda没有得到self形参。

class c:
def __init__( self ):
self.m1 = lambda self: 1
self.m3 = self._m3
m2 = lambda self: 1

def _m3( self ):
pass
c().m2() # works
c().m3() # works
c().m1() # error: missing 1 required positional argument: 'self'

我必须做些什么才能用c().m1()语法调用m1 lambda ?

一个函数需要绑定到一个实例上,才能成为该实例的绑定方法,并在调用时作为第一个参数与该实例一起传递。

您可以使用types.MethodType:

将未绑定的函数绑定到实例。
from types import MethodType
class c:
def __init__(self):
self.m1 = MethodType(lambda self: 1, self)

Replace

self.m1 = lambda self: 1

self.m1 = lambda: 1

最新更新