我是编程新手,所以请不要因为我问愚蠢的问题而杀了我。
我一直试图了解 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/