我想使用字符串找回内置类从Python中。通过试验/错误,我已经找到一种方法来实现它:访问内置类的字符串
>>> __builtins__.__dict__['str']
<class 'str'>
>>> __builtins__.__dict__['int']
<class 'int'>
是否有一个更Python的方式来做到这一点?有没有更安全的方法来做到这一点?
我想使用字符串找回内置类从Python中。通过试验/错误,我已经找到一种方法来实现它:访问内置类的字符串
>>> __builtins__.__dict__['str']
<class 'str'>
>>> __builtins__.__dict__['int']
<class 'int'>
是否有一个更Python的方式来做到这一点?有没有更安全的方法来做到这一点?
最好做它通过vars()
,而不是抢模块__dict__
。抓住掠夺者通常不是最好的想法,因为他们可能会发生变化;这就是为什么内置函数如vars
在附近;不言而喻,并抓住字典为您提供对象,
因此,而不是:
>>> __builtins__.__dict__['str']
使用:
>>> vars(__builtins__)['str']
与同时还安全,更具可读性同样的效果。
你可以使用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'>
是使用eval安全行为在编程? – jlandercy
它取决于正在评估的字符串的来源。无论如何,你减轻可以做什么用的自定义全局字典,限制什么,如果有的话,内置插件,可以通过评估的表达式中使用它供应。 – martineau