S1a*_*wek 3 python locals globals
我是编程的新手,所以请不要因为提出愚蠢的问题而杀了我.我一直在努力理解Python中的所有类业务,我到了无法通过谷歌找到我的问题的答案.
在我的程序中,我需要根据函数返回的字符串从其他类中调用一个类.我发现了两种解决方案:一种是使用getattr(),另一种是使用globals()/ locals().
决定采用第二种解决方案并使其正常工作,但我真的不明白它是如何工作的.
所以有代码示例:
class Test(object):
def __init__(self):
print "WORKS!"
room = globals()['Test']
room()
Run Code Online (Sandbox Code Playgroud)
type(room()) 得到:
<class '__main__.Test'>
Run Code Online (Sandbox Code Playgroud)
type(room) 得到:
<type 'type'> # What????
Run Code Online (Sandbox Code Playgroud)
它看起来像是room()一个类对象,但不应该room代替room()?
请帮助我,因为如果我编写一些我不了解的代码,这有点傻.
这里发生的是以下内容:
class Test(object):
def __init__(self):
print "WORKS!"
room = globals()['Test']
Run Code Online (Sandbox Code Playgroud)
在这里,你得到Test的room,你想要的方式.验证这个:
room is Test
Run Code Online (Sandbox Code Playgroud)
应该给True.
type(room())得到:Run Code Online (Sandbox Code Playgroud)<class '__main__.Test'>
你向后退一步:room()返回与Test()那个 - 该类的一个实例相同的内容.type()"撤消"这一步骤.获取对象的类型 - 当然,这是Test.
type(room)得到:Run Code Online (Sandbox Code Playgroud)<type 'type'> # What????
当然 - 它是(新风格)类的类型.同样的type(Test).
但请注意,对于
在我的程序中,我需要根据函数返回的字符串从其他类中调用一个类.我发现了两种解决方案:一种是使用
getattr(),另一种是使用globals()/locals().
创建一个明确单独的dict可能会更好.在这里,您可以完全控制在该上下文中允许哪些对象/类/ ...,哪些不是.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |