2009-07-30 17 views
7

Pythonでは辞書を使ってクラスをインスタンス化できますか?クラスの辞書?

shapes = {'1':Square(), '2':Circle(), '3':Triangle()} 

x = shapes[raw_input()] 

私は、ユーザーがメニューから選択せ、入力時にelseステートメント場合は、巨大なコーディングしないようにしたいです。たとえば、ユーザーが2を入力した場合、xはCircleの新しいインスタンスになります。これは可能ですか?

+0

あなたは何が起こったのか、それを試みたのはいつですか? –

+0

さて、私はメニューでそれをやっているだけで、一般的なメニューラッパーは、どのメニューをロードするかを処理しています。私は非常にこれに新しいです: -/ – mandroid

+1

はい、それは可能です、あなたはそれを正しくやっているあなたは、最初に一度一度すべての図形をインスタンス化し、dictにインスタンスを格納し、それらの1つをx 。選択したクラスだけをインスタンス化する場合、または個々の図形を複数回インスタンス化する場合は、Vinayの答えを使用します。 – Markus

答えて

23

ほぼ。何がしたいことは

shapes = {'1':Square, '2':Circle, '3':Triangle} # just the class names in the dict 

x = shapes[raw_input()]() # get class from dict, then call it to create a shape instance. 
+0

うわー。私たちはそれを行うことができないのは分かりません。それは非常にpythonicです。ありがとうございましたvinay sajip ... –

1

である私はチュー機能をお勧めします:

def choose(optiondict, prompt='Choose one:'): 
    print prompt 
    while 1: 
     for key, value in sorted(optiondict.items()): 
      print '%s) %s' % (key, value) 
     result = raw_input() # maybe with .lower() 
     if result in optiondict: 
      return optiondict[result] 
     print 'Not an option' 

result = choose({'1': Square, '2': Circle, '3': Triangle})()