Python将函数名称作为参数传递

时间:2015-11-19 04:23:14

标签: python function class parameter-passing

我的目标是编写一个类,允许我在创建对象时确定调用哪个方法(A1或A2)。 C将呼叫B,B将呼叫A。

def A1():
    return 'A1_g'
def A2():
    return 'A2_g'

class test:

    def __init__(self, means=None):
        self.means=means

    def A1(self):
        return 'A1'
    def A2(self):
        return 'A2'
    def B(self,A):
        new_string='methodB called '+A()
        print new_string
    def C(self):
        q=self.B(self.means)
        return q

p=test(means=A1)

p.C()

我得到了这个输出"方法B叫做A1_g"。但我想"方法B称为A1"

如果我删除前两个fn定义,我得到了#34; NameError:name' A1'未定义"。想要了解如何以及为什么要实现这一目标。

1 个答案:

答案 0 :(得分:3)

>>> p = test(means=test().A1)
>>> p.C()
methodB called A1

或者,更简洁:

>>> test(means=test().A1).C()
methodB called A1

替代方法:将方法名称作为字符串

传递

如果我们不想传递方法本身,而是希望将方法的 name 作为字符串传递,那么我们需要更改方法B,如下所示:

    def B(self,A):
        method = getattr(self, A)
        new_string='methodB called ' + method()
        print new_string

getattr函数返回由变量self命名的A属性。

现在,可以按如下方式运行:

>>> p = test(means="A1")
>>> p.C()
methodB called A1