我有一个名为" App"有几种方法。我想编写一个函数,它创建几个App实例,并为每个实例使用其中一个方法。如何将方法名作为参数传递给函数?
代码示例:
class App(object):
def __init__(self, id):
self.id = id
def method_1(self):
result1 = self.id + 1
return result1
def method_2(self):
result2 = self.id + 2
return result2
def use_method_for_each_instance(method):
all_results = []
for id in id_list:
app_instance = App(id)
all_results.append(app_instance.method())
return all_results
id_list = [1,2,3]
use_method_for_each_instance(method_1)
使用此代码我得到" NameError:name' method_1'未定义",这是合乎逻辑的,因为method_1仅在" App"对象已创建。 你能帮我改变我的代码以避免这个错误吗?
答案 0 :(得分:4)
您可以使用类命名空间中的函数。
def use_method_for_each_instance(method):
all_results = []
for id in id_list:
app_instance = App(id)
all_results.append( method(app_instance) )
return all_results
id_list = [1,2,3]
use_method_for_each_instance(App.method_1)
答案 1 :(得分:3)
您可以传递方法的名称作为字符串,然后您可以使用getattr
从app_instance
中检索方法。
像这样:
def use_method_for_each_instance(method):
for id in id_list:
app_instance = App(id)
method_to_call = getattr(app_instance, method)
# ^ gets callable method from instance
all_results.append(method_to_call())
return all_results
use_method_for_each_instance("method_1")