2017-02-28 6 views
2

私はさまざまなメソッドを含むクラスを持っています。コマンドを受け入れてメソッドを呼び出す

今、main()がREPLとして機能します。私はそれぞれ異なるコマンドを持っていますが、それぞれ異なる方法を指しています。 (例えば。Command1を(コール法1))

私はその後、方法私はこれをどのように行うことができます

呼び出す>>> ようにプロンプ​​トを印刷して、一度に一つのコマンドを受け入れるようにしたいですか?

方法によって
class supermarket(object): 
      def __init__(self): 
        pass 
      def method1(self): 
        pass 
      def method2(self): 
        pass 
      ... 

    def main(): 

、私はその後、ちょうど結果のメソッドオブジェクトを呼び出し、あなたが名前で属性を取得するためにgetattr()機能を使用することができますのpython 3.5

+2

'argparse'はあなたにとって良い選択です。このチュートリアルは役に立つかもしれません。https://pymotw.com/2/argparse/ – haifzhan

答えて

3

を使用しています:メソッド場合

def main(): 
    s = supermarket() 
    while 1: 
     cmd = input('>>> ') # or raw_input('>>> ') if using Python < 3 
     if cmd in ('q', 'quit'): 
      break 
     print(getattr(s, cmd)()) 

を名前は、翻訳するために何らかの方法で必要なコマンドとは異なります(getattrを使用する必要はありません)。

def main(): 
    s = supermarket() 
    while 1: 
     cmd = input('>>> ') 
     if cmd in ('q', 'quit'): 
      break 
     print({ 
      'command1': s.method1, 
      'command2': s.method2, 
      # ... 
     }[cmd]()) 
+0

この行は何ですか?「cmd in( 'q'、 'quit') "意味ですか? – joe

+0

ユーザが 'q'または' quit'を入力すると、 'while 1'ループから抜け出します。それはきれいな出口です。 – thebjorn

+0

誤って 'cmd = line'の最後に': 'を置き、' raw_input'を 'input'に変更します。答えはpython 3.Xのためです。 'getattr'を知らなかった、ありがとう! –

関連する問題