2011-01-05 39 views
2

我試圖找到一些關於python反射的信息。我發現這給了這是一個代碼片段維基百科文章:python中的反射

# without reflection 
Foo().hello() 

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

我沒能得到這個工作。我真正需要的是一種實例化對象的方法。所以如果我有一個字符串'Foo',我希望能夠得到一個Foo類型的對象。像Java中,我可以這樣說:調用Class.forName(「富」)

剛剛發現這個......不知道爲什麼我找不到此之前: Does python have an equivalent to Java Class.forName()?

+0

你幾乎有:fooobj =全局()[ '富'()... fooobj.hello() – 2011-01-05 07:13:49

回答

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']()?什麼是globals意味着 – JPC 2011-01-05 07:09:37

+1

@JPC,第二是語法錯誤。 golbals()引用你的模塊的命名空間(這是一個字典),命名空間是Python處理它的程序/模塊的方式。通過golbals()['Foo'],您可以在glabals()字典中訪問名爲'Foo'的鍵。 – 2011-01-05 07:15:01

+1

這很有道理,謝謝。 python中的反射比java中容易得多! – JPC 2011-01-05 07:21:23