Python将函数名作为参数传递
我的目标是编写一个类,该类允许我在创建对象p时确定调用哪个方法(A1或A2)。C叫B,B叫APython将函数名作为参数传递,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
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
的名称作为字符串传递。