使用 class 方法作为函数的参数
Using a class method as an argument to a function
我想将 class 方法作为参数传递给将方法应用于实例的函数。我写了一个我的问题的简化示例,但它不起作用。在 python 中有没有办法做到这一点?
class A:
def __init__(self):
self.values = [1,2,3]
def combine(self) -> int:
return sum(self.values)
def return_zero(self) -> int:
return 0
def apply_func(instance, func):
return instance.func()
print(apply_func(A(), A.combine))
> AttributeError: 'A' object has no attribute 'func'
您可以使用 getattr():
def apply_func(instance, func):
fn = getattr(instance, func)
return fn()
print(apply_func(A(), 'combine'))
输出:
6
而不是
def apply_func(instance, func):
return instance.func()
你应该做的:
def apply_func(instance, func):
return func(instance)
记住方法定义为 def combine(self)
- 通过调用 func(instance)
,instance
简单地变成 self
.
我想将 class 方法作为参数传递给将方法应用于实例的函数。我写了一个我的问题的简化示例,但它不起作用。在 python 中有没有办法做到这一点?
class A:
def __init__(self):
self.values = [1,2,3]
def combine(self) -> int:
return sum(self.values)
def return_zero(self) -> int:
return 0
def apply_func(instance, func):
return instance.func()
print(apply_func(A(), A.combine))
> AttributeError: 'A' object has no attribute 'func'
您可以使用 getattr():
def apply_func(instance, func):
fn = getattr(instance, func)
return fn()
print(apply_func(A(), 'combine'))
输出:
6
而不是
def apply_func(instance, func):
return instance.func()
你应该做的:
def apply_func(instance, func):
return func(instance)
记住方法定义为 def combine(self)
- 通过调用 func(instance)
,instance
简单地变成 self
.