1

私はPythonプロジェクトに取り組んでいます。そこでは、すでにたくさんのクラスが作成されています。実行するクラス(つまり、リストが表示されるクラスの名前)を入力するようにユーザーに求めます。

彼が選択肢を選択した後、ユーザーが要求したクラスのインスタンスを作成し、適切な出力を表示したいと思います。

シナリオはこんな感じ…

"""
My Class definitions go up here...
"""


classList = {'a':'AClass','b':'BClass','c':'CClass'}
for i in iter(classList):
   print i
x = raw_input('Enter class name: ') 'Get the user input and store it.'
"""
I'm stuck here.
Have to create an instance for the requested class.
i.e., have to create an instance to AClass if the user entered a (classList[a])
"""

手順は知っていますが、あいまいなのは、switch caseまたはif-elseを使用してその入力を確認し、対応するクラスのインスタンスを作成することです。しかし、私はPythonを初めて使用するので、これをよりエレガントな方法で実現する他の方法があるかどうか知りたいですか?

4

3 に答える 3

2

クラス名をに格納する代わりにclassList、クラス自体を格納できます。

class AClass(object): pass
class BClass(object): pass
class CClass(object): pass

classList = {'a':AClass, 'b':BClass, 'c':CClass}

このように、名前が格納されているクラスのインスタンス化は次のxように簡単です

obj = classList[x]()
于 2012-11-08T15:47:57.620 に答える
0

まともなスタートを切っていますが、クラスを渡すことができることを覚えておく必要があります。したがって、これは機能します:

class A(): pass

class B(): pass

map = {'a': A, 'b': B}

instance = map['a']()
于 2012-11-08T15:48:04.493 に答える
0

それでも文字列からクラス インスタンスを作成したい場合は、そのためのバニラ関数を次に示します。

def get_object_type(classname, modulename):
    __import__(modulename)
    return getattr(sys.modules[modulename], classname)

def get_object_instance(classname, modulename, param={}):
    return get_object_type(classname, modulename)(**param)

new_instance = get_object_instance("ClassA", "modulename")
于 2012-11-08T16:11:00.377 に答える