我使用它前动态添加属性到模块,我想验证添加的属性存在(在模块中)。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
你为什么不问之前尝试吗? –