我的目标是编写一个类,允许我在创建对象时确定调用哪个方法(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'未定义"。想要了解如何以及为什么要实现这一目标。
答案 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