python – 使用globals()创建类对象

我是编程的新手,所以请不要因为提出愚蠢的问题而杀了我.

我一直在努力理解
Python中的所有类业务,我到了无法通过谷歌找到我的问题的答案.

在我的程序中,我需要根据函数返回的字符串从其他类中调用一个类.我找到了两个解决方案:一个使用getattr(),另一个使用globals()/ locals().

决定采用第二种解决方案并使其正常工作,但我真的不明白它是如何工作的.

所以有代码示例:

class Test(object):
    def __init__(self):
        print "WORKS!"

room = globals()['Test'] 
room()

type(room())给出:

<class '__main__.Test'>

类型(房间)给出:

<type 'type'> # What????

看起来像room()是一个类对象,但不应该是空间而不是room()?

请帮助我,因为如果我编写一些我不了解的代码,这有点傻.

最佳答案 这里发生的是以下内容:

class Test(object):
    def __init__(self):
        print "WORKS!"

room = globals()['Test']

在这里,您可以按照自己想要的方式进行测试.验证这个:

room is Test

应该给予真实.

type(room()) gives:

06002

你向后退一步:room()返回与Test()相同的 – 该类的一个实例. type()“撤消”这一步骤.获取对象的类型 – 当然,这是测试.

type(room) gives:

06003

当然 – 它是(新风格)类的类型.与类型(测试)相同.

但请注意,对于

In my program I need to call a class from within other class based on string returned by function. I found two solutions: one by using getattr() and second one by using globals() / locals().

创建一个明确单独的dict可能会更好.在这里,您可以完全控制在该上下文中允许哪些对象/类/ …,哪些不是.

点赞