2017-05-26 23 views
1

注意:A similar question已经存在,虽然是C#。在构建时调用一个未指定的方法

让我们假设我的代码如下所示:

class SomeClass: 

    def __init__(self): 
     pass 

    def do(self): 
     print("a") 

class SomeOtherClass: 

    def __init__(self): 
     pass 

    def do(self): 
     print("b") 

class B: 

    def __init__(self): 
     self.SomeClass = SomeClass() 
     self.SomeOtherClass = SomeOtherClass() 

def __main__(): 
    myclass = B() 
    desired_class = str(input("The method of which class do you want to execute? ")) 
    myclass.desired_class.do() 

我不知道在内置时候什么方法SomeClass将被调用。如果你有200种方法,而且只有2种方法可供选择,那么,如果其他方法也不是很整齐。

这是如何在python中最有效地完成的?

注意:method将始终是SomeClass的现有方法。

+0

@MadPhysicist我居然还没有发现这个问题,尽管我一直在寻找了不少。感谢您指出,这显然是重复的,因为答案是相同/相似的。 – Narusan

+1

你可以随时选择关闭你自己的问题。这是一个寻找正确的搜索条件的问题,这意味着要知道正确的术语,这是一种捕获 - 22。你必须从某个地方开始。 –

+0

在“编辑”旁边是否有关闭按钮? –

回答

5

getattr怎么样?

class SomeClass: 
    def bark(self): 
     print("woof") 

myclass = SomeClass() 
method = input("What do you want to execute? ") 
getattr(myclass, method)() 

结果:

C:\Users\Kevin\Desktop>py -3 test.py 
What do you want to execute? bark 
woof 
+0

更新的问题如何?这也会起作用吗? – Narusan

+1

当然。你只需要做's = input(“你想执行哪个类的方法?”); getattr(myclass,s).do()'。然后,当用户输入“SomeClass”时,它将执行myclass.SomeClass.do()。请注意,您不能将“class”用作变量名称,因为它是保留字。 – Kevin

相关问题