2011-01-05 55 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