在python

时间:2016-07-18 15:38:13

标签: python oop

我有一个名为" 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"对象已创建。 你能帮我改变我的代码以避免这个错误吗?

2 个答案:

答案 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)

您可以传递方法的名称作为字符串,然后您可以使用getattrapp_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")