2013-10-22 23 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 
相关问题