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

callMethod1を使用して、またはcallMethod2call()で呼び出したい"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他のメソッドを呼び出すためにクラスにアクセスする必要があるため、メソッドはstaticmethodであってはなりません。

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 に答える