1
class Test:
 @staticmethod
   def call():
     return
 def callMethod1():
    return
 def callMethod2():
    return
var methodName='Method1'

我想调用callMethod1callMethod2在 call() 中使用"call"+methodName(). 即,在 php 中,我们确实使用 T 调用任何成员est->{"call".methodName}()我如何在没有 eval() 方法的情况下在 python 中实现这一点。

4

3 回答 3

3
class Test:
   @staticmethod
   def call(method):
      getattr(Test, method)()

   @staticmethod
   def method1():
      print('method1')

   @staticmethod
   def method2():
      print('method2')

Test.call("method1")
于 2012-12-13T09:31:16.597 回答
2

您可以getattr在类上使用来获取方法。我不确定如何将它准确地集成到您的代码中,但也许这个示例会有所帮助:

def invoke(obj, methodSuffix):
    getattr(obj, 'call' + methodSuffix)()

x = Test()
invoke(x, 'Method1')

但是您必须首先将self其作为第一个参数添加到您的方法中。

于 2012-12-13T09:30:29.823 回答
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()
于 2012-12-13T09:31:32.247 回答