我是编程的新手,所以请不要因为提出愚蠢的问题而杀了我.
我一直在努力理解
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 usingglobals()
/locals()
.
创建一个明确单独的dict可能会更好.在这里,您可以完全控制在该上下文中允许哪些对象/类/ …,哪些不是.