2017-02-28 39 views
2

我有一個包含不同方法的類。接受命令並調用方法

現在我想我的main()充當REPL。我有不同的命令,每個都指向不同的方法。 (例如,命令1(調用方法1))

我想打印一個提示符>>> ,每次接受一個命令,然後調用該方法

我該怎麼辦呢?

class supermarket(object): 
      def __init__(self): 
        pass 
      def method1(self): 
        pass 
      def method2(self): 
        pass 
      ... 

    def main(): 

順便說一下,我使用python 3.5

+2

看起來'argparse'對你來說是一個不錯的選擇。這個教程可能會有幫助https://pymotw.com/2/argparse/ – haifzhan

回答

3

可以使用getattr()函數來獲取由名稱屬性,那麼只需調用產生的方法對象:

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

這行代碼是什麼「if cmd in('q','quit'): 「 意思? – joe

+0

如果用戶輸入'q'或'quit',那麼我們打破'while 1'循環。這是一個乾淨的方式退出。 – thebjorn

+0

你把':'放在'cmd = line'的末尾,並且把'raw_input'改成'input',因爲答案應該是python 3.X。不知道'getattr',謝謝! –