class Test:
@staticmethod
def call():
return
def callMethod1():
return
def callMethod2():
return
var methodName='Method1'
我想使用callMethod1
在call()中调用callMethod2
或"call"+methodName()
。即,在php中我们使用T est->{"call".methodName}()
调用任何成员如何在没有eval()方法的python中实现这一点。
答案 0 :(得分:3)
class Test:
@staticmethod
def call(method):
getattr(Test, method)()
@staticmethod
def method1():
print('method1')
@staticmethod
def method2():
print('method2')
Test.call("method1")
答案 1 :(得分:2)
您可以在课程上使用getattr
来获取该方法。我不确定如何将它集成到您的代码中,但也许这个例子会有所帮助:
def invoke(obj, methodSuffix):
getattr(obj, 'call' + methodSuffix)()
x = Test()
invoke(x, 'Method1')
但是你必须首先添加self
作为方法的第一个参数。
答案 2 :(得分:0)
你应该清理你的示例代码,缩进被破坏,你没有self
方法。
使用getattr(self, "call"+methodName)()
。此外,call
方法不应该是静态方法,因为它需要访问类来调用其他方法。
class Test:
def __init__(self, methodName):
self.methodName = methodName
def call(self):
return getattr(self, "call" + self.methodName, "defaultMethod")()
def callMethod1(self): pass
def callMethod2(self): pass
def defaultMethod(self): pass
t = Test("Method1")
t.call()