如何在 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 一个接受其余部分然后调用原始函数的新函数。
考虑下面的 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 一个接受其余部分然后调用原始函数的新函数。