我想使用字符串找回內置類從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