Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将函数名作为参数传递_Python_Function_Class_Parameter Passing - Fatal编程技术网

Python将函数名作为参数传递

Python将函数名作为参数传递,python,function,class,parameter-passing,Python,Function,Class,Parameter Passing,我的目标是编写一个类,该类允许我在创建对象p时确定调用哪个方法(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

我的目标是编写一个类,该类允许我在创建对象p时确定调用哪个方法(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()
我得到了这个输出“methodB称为A1_g”。但我想要“方法B称为A1”

如果我删除前2个fn定义,我会得到“NameError:name'A1'未定义”。想了解如何以及为什么实现这一点

>>> p = test(means=test().A1)
>>> p.C()
methodB called A1
或者,更简洁地说:

>>> test(means=test().A1).C()
methodB called A1
备选方案:将方法名称作为字符串传递 如果我们不想传递方法本身,而是想将方法的名称作为字符串传递,那么我们需要更改方法
B
,如下所示:

    def B(self,A):
        method = getattr(self, A)
        new_string='methodB called ' + method()
        print new_string
>>> p = test(means="A1")
>>> p.C()
methodB called A1
getattr
函数返回由变量
A
命名的
self
属性

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

    def B(self,A):
        method = getattr(self, A)
        new_string='methodB called ' + method()
        print new_string
>>> p = test(means="A1")
>>> p.C()
methodB called A1
或者,更简洁地说:

>>> test(means=test().A1).C()
methodB called A1
备选方案:将方法名称作为字符串传递 如果我们不想传递方法本身,而是想将方法的名称作为字符串传递,那么我们需要更改方法
B
,如下所示:

    def B(self,A):
        method = getattr(self, A)
        new_string='methodB called ' + method()
        print new_string
>>> p = test(means="A1")
>>> p.C()
methodB called A1
getattr
函数返回由变量
A
命名的
self
属性

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

    def B(self,A):
        method = getattr(self, A)
        new_string='methodB called ' + method()
        print new_string
>>> p = test(means="A1")
>>> p.C()
methodB called A1

我正在寻找一种在类中修改方法B的方法,以使对象p更易于使用?例如,只需传递fn A1的名称(或通过字符串)来调用a或修改A1名称的前导/尾随部分__;?我有很多名字要传。在这篇文章之前,我读过和,但没有得到直接的答案。我更新了我的答案,用一种方法将
A1
的名称作为字符串传递。我正在寻找一种方法来修改类中的方法B,以便使对象p更易于使用?例如,只需传递fn A1的名称(或通过字符串)来调用a或修改A1名称的前导/尾随部分__;?我有很多名字要传。在这篇文章之前,我读过和,但没有得到直接的答案。我更新了我的答案,将
A1
的名称作为字符串传递。