2017-05-26 11 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のどのような方法で構築された時に知ることができません。 If-then-elseは、200のメソッドを持っていて、2つしか選択できない場合、非常にきれいではありません。

これはPythonでどのように最も効率的に行われますか?

注:methodは、常にSomeClassの既存の方法です。

+0

@MadPhysicist。それを指摘してくれてありがとう、これは明らかに回答が同じ/類似しているので重複しています。 – Narusan

+1

自分の質問をいつでも閉じることができます。正しい検索用語を見つけることは重要です。これは、正しい用語を知っていることを意味します。あなたはどこかに出発しなければならない。 –

+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

関連する問題