我是编程新手,所以请不要因为我问愚蠢的问题而杀了我。
我一直试图了解 Python 中的所有类业务,但我已经到了无法通过谷歌找到我的问题的答案的地步。

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

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

所以有代码示例:

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

room = globals()['Test']
room()
type(room()) 给出:
<class '__main__.Test'>
type(room) 给出:
<type 'type'> # What????

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

请帮助我,因为如果我编写自己不理解的代码,这有点愚蠢。

最佳答案

这里发生的事情如下:

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

room = globals()['Test']

在这里,您以您想要的方式将 Test 作为 room 。验证这一点:
room is Test

应该给 True



你做一步倒退:room() 返回与 Test() 相同的 - 该类的一个实例。 type() “撤销”这一步。获取对象的类型 - 这当然是 Test



当然 - 它是(新风格)类的类型。与 type(Test) 相同。

但是请注意,对于



最好创建一个明确独立的字典。在这里,您可以完全控制在该上下文中允许哪些对象/类/...,哪些不允许。

关于python - 使用 globals() 创建类对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12745756/

10-12 19:31