我想使用字符串从Python中检索内置类。通过反复试验,我找到了实现它的方法:
>>> __builtins__.__dict__['str']
<class 'str'>
>>> __builtins__.__dict__['int']
<class 'int'>
有更多的Pythonic方法吗?有更安全的方法吗?
答案 0 :(得分:2)
最好通过vars()
完成,而不是抓取模块__dict__
。抓劫一般不是最好的主意,因为它们可能会发生变化;这就是为什么像vars
这样的内置函数的原因;它会抓取您提供的对象的字典,
所以,而不是:
>>> __builtins__.__dict__['str']
使用:
>>> vars(__builtins__)['str']
具有相同的效果,同时又安全且可读性更高。
答案 1 :(得分:2)
你可以使用Python内置的eval()
函数,它可以避免引用任何带有双下划线名称的东西(并且由于字符串来自可信来源,因此是安全的):
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
current directory: "C:\vols\Files\PythonLib\Stack Overflow"
>>> eval('str')
<class 'str'>
>>> eval('int')
<class 'int'>