我正在向模块添加动态属性,在使用之前我想验证添加的属性是否存在(在模块中)。
hasattr签名是:
hasattr(object, name)
模块不是对象,那么如何验证添加属性的存在?
答案 0 :(得分:11)
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
如果你有一个带有模块 name 的字符串,那么你可以在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
答案 1 :(得分:2)
>>> import os
>>> hasattr(os, 'path')
True
>>>
正如您所见hasattr
在模块上工作(一切都是python中的对象,包括函数和模块)。
答案 2 :(得分:1)
为什么不呢?
>>> import sys
>>> sys.modules['sys']
<module 'sys' (built-in)>
>>> type(sys.modules['sys'])
<type 'module'>
>>> hasattr(sys, 'argv')
True
答案 3 :(得分:0)
实际上, 是一个对象。 python中的所有内容都是一个对象 。看看this问题。
>>>import os
>>>issubclass(type(os), object)
True
>>>hasattr(os, 'kill')
True
>>>