如何在 Python 实例化时将函数及其参数传递给对象?

How can I pass a function and its arguments to an object at the moment of instantiation in Python?

考虑下面的 class:

class Test():
  def __init__(self, data, transformation = None):
    self.data = data
    self.transformation = transformation

  def my_method(self):
    if self.transformation:
      data = self.transformation(self.data)
    return data

此 class 获取一个数据和一个函数作为其参数,该函数将对数据执行一些转换。现在,在 class 之外,我创建了一个函数来执行我想要的转换。但是,我定义的函数除了数据本身之外还有几个参数。在下面的代码中创建对象时,如何将这些额外参数传递给 class?

instance = Test(data, my_func)

您可以部分应用参数:

import functools

def my_func(a, b, c):
    return a * b + c

class Test():
  def __init__(self, data, transformation = None):
    self.data = data
    self.transformation = transformation

  def my_method(self):
    if self.transformation:
      data = self.transformation(self.data)
    return data

instance = Test(2, functools.partial(my_func, 3, 4))
print(instance.my_method()) # prints 14 (3 * 4 + 2)

functools.partial 是标准库中的高阶函数,它接受一个函数,它的一些参数,returns 一个接受其余部分然后调用原始函数的新函数。