[英]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()中調用callMethod1
或callMethod2
。 即,在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.