我使用它前動態添加屬性到模塊,我想驗證添加的屬性存在(在模塊中)。hasattr可以在模塊上工作嗎?
hasattr簽名是:
hasattr(object, name)
模塊不是一個對象,所以我怎麼能確認所添加的屬性的存在?
我使用它前動態添加屬性到模塊,我想驗證添加的屬性存在(在模塊中)。hasattr可以在模塊上工作嗎?
hasattr簽名是:
hasattr(object, name)
模塊不是一個對象,所以我怎麼能確認所添加的屬性的存在?
Python模塊是的一個對象。 hasattr()
工作得很好。
演示:
>>> import os
>>> type(os)
<type 'module'>
>>> os
<module 'os' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/os.pyc'>
>>> hasattr(os, 'sep')
True
>>> hasattr(os, 'foobar')
False
如果你有一個模塊名一個字符串,然後你可以看一下在sys.modules
mapping模塊對象:
>>> import sys
>>> sys.modules['os']
<module 'os' from '/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/os.pyc'>
>>> hasattr(sys.modules['os'], 'sep')
True
感謝您的回答。 我需要一些模塊名稱的關鍵字。 如果例如我的模塊被稱爲'MyModule',並且我想查看'MyAttribute'屬性是否存在,我不想通過hasattr('MyModule','MyAttribute')檢查它,而是通過一些能夠識別模塊名稱 - hasattr(關鍵詞,'MyAttribute')。 – EitanG
@EitanG:您可以在'sys.modules'映射中通過名稱查找模塊:'hasattr(sys.modules [modulename],'MyAttribute')'。 –
>>> import os
>>> hasattr(os, 'path')
True
>>>
正如你看到的hasattr
在模塊上工作(一切都是python中的對象,包括函數和模塊)。
實際上,它是是的一個對象。 python中的所有東西都是對象。請看this問題。
>>>import os
>>>issubclass(type(os), object)
True
>>>hasattr(os, 'kill')
True
>>>
爲什麼不呢?
>>> import sys
>>> sys.modules['sys']
<module 'sys' (built-in)>
>>> type(sys.modules['sys'])
<type 'module'>
>>> hasattr(sys, 'argv')
True
Python模塊** **是一個對象 –
在Python中一切都是對象) – alexvassel
你爲什麼不問之前嘗試嗎? –