2011-01-05 9 views
2

私は、リフレクションに関する情報をPythonで探しています。私はこれをコードスニペットとして与えたwikipediaの記事を見つけました:Pythonのリフレクション

# without reflection 
Foo().hello() 

# with reflection 
getattr(globals()['Foo'](), 'hello')() 

私はこれを動作させることができませんでした。私が本当に必要とするのは、オブジェクトをインスタンス化する方法です。ですから、もし私が文字列 'Foo'を持っていれば、Foo型のオブジェクトを得ることができます。 Javaでのように私のような何かを言うことができる:Class.forNameの(「foo」という)

はただ、これを見つけた...私は前にこれを見つけることができなかった理由を不思議に思う: Does python have an equivalent to Java Class.forName()?

+0

あなたがほとんどありますfooobj =グローバル()[ 'フー']()... fooobj.hello() –

答えて

8

私は本当に必要なものオブジェクトをインスタンス化する方法。

これはglobals()['Foo']()の部分です。

そしてそれは私の作品:

>>> class Foo: 
... def __init__(self): print "Created a Foo!" 
... 
>>> globals()['Foo']() 
Created a Foo! 
<__main__.Foo instance at 0x02A33350> 
>>> 
+0

F =グローバルの違いは何ですか()['Foo']()とf = ['Foo']()?グローバルが意味するものは – JPC

+1

@JPC、2番目は構文エラーです。 golbals()はあなたのモジュール(辞書である)の名前空間を指し、名前空間はPythonがどのようにプログラム/モジュールを扱うかです。 golbals()['Foo']によって、glabals()辞書の 'Foo'というキーにアクセスしています。 –

+1

それは感謝します、ありがとう。 Pythonでのリフレクションは、javaよりもはるかに簡単です! – JPC

関連する問題