2016-11-19 72 views
0

我想使用字符串找回内置类从Python中。通过试验/错误,我已经找到一种方法来实现它:访问内置类的字符串

>>> __builtins__.__dict__['str'] 
<class 'str'> 
>>> __builtins__.__dict__['int'] 
<class 'int'> 

是否有一个更Python的方式来做到这一点?有没有更安全的方法来做到这一点?

回答

2

最好做它通过vars(),而不是抢模块__dict__。抓住掠夺者通常不是最好的想法,因为他们可能会发生变化;这就是为什么内置函数如vars在附近;不言而喻,并抓住字典为您提供对象,

因此,而不是:

>>> __builtins__.__dict__['str'] 

使用:

>>> vars(__builtins__)['str'] 

与同时还安全,更具可读性同样的效果。

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'> 
+0

是使用eval安全行为在编程? – jlandercy

+0

它取决于正在评估的字符串的来源。无论如何,你减轻可以做什么用的自定义全局字典,限制什么,如果有的话,内置插件,可以通过评估的表达式中使用它供应。 – martineau