2016-11-19 76 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