2013-10-22 80 views
0

我使用它前動態添加屬性到模塊,我想驗證添加的屬性存在(在模塊中)。hasattr可以在模塊上工作嗎?

hasattr簽名是:

hasattr(object, name) 

模塊不是一個對象,所以我怎麼能確認所添加的屬性的存在?

+0

Python模塊** **是一個對象 –

+0

在Python中一切都是對象) – alexvassel

+0

你爲什麼不問之前嘗試嗎? –

回答

10

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

感謝您的回答。 我需要一些模塊名稱的關鍵字。 如果例如我的模塊被稱爲'MyModule',並且我想查看'MyAttribute'屬性是否存在,我不想通過hasattr('MyModule','MyAttribute')檢查它,而是通過一些能夠識別模塊名稱 - hasattr(關鍵詞,'MyAttribute')。 – EitanG

+0

@EitanG:您可以在'sys.modules'映射中通過名稱查找模塊:'hasattr(sys.modules [modulename],'MyAttribute')'。 –

2
>>> import os 
>>> hasattr(os, 'path') 
True 
>>> 

正如你看到的hasattr在模塊上工作(一切都是python中的對象,包括函數和模塊)。

0

實際上,它是的一個對象。 python中的所有東西都是對象。請看this問題。

>>>import os 
    >>>issubclass(type(os), object) 
    True 
    >>>hasattr(os, 'kill') 
    True 
    >>> 
1

爲什麼不呢?

>>> import sys 

>>> sys.modules['sys'] 
<module 'sys' (built-in)> 

>>> type(sys.modules['sys']) 
<type 'module'> 

>>> hasattr(sys, 'argv') 
True 
相關問題