簡體   English   中英

Python:使用eval按名稱調用類和類方法

[英]Python: Invoke class & class methods by name with using eval

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

我想使用"call"+methodName()在call()中調用callMethod1callMethod2 即,在php中,我們確實使用T est->{"call".methodName}()調用任何成員。如何在沒有eval()方法的python中實現此目的。

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

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

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

Test.call("method1")

您可以在類上使用getattr來獲取方法。 我不確定如何將其准確地集成到您的代碼中,但是也許這個例子會有所幫助:

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

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

但是您必須首先將self作為第一個參數添加到方法中。

你應該清理您的示例代碼,壓痕壞了,你沒有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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM