我正在向模块添加动态属性,在使用它之前我想验证添加的属性是否存在(在模块中)。
hasattr 签名是:
hasattr(object, name)
module 不是对象,那么如何验证添加的属性是否存在?
我正在向模块添加动态属性,在使用它之前我想验证添加的属性是否存在(在模块中)。
hasattr 签名是:
hasattr(object, name)
module 不是对象,那么如何验证添加的属性是否存在?
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
映射中查找模块对象:
>>> 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
>>> import os
>>> hasattr(os, 'path')
True
>>>
如您所见hasattr
,适用于模块(python 中的一切都是对象,包括函数和模块)。
为什么不?
>>> import sys
>>> sys.modules['sys']
<module 'sys' (built-in)>
>>> type(sys.modules['sys'])
<type 'module'>
>>> hasattr(sys, 'argv')
True
实际上,它是一个对象。python 中的一切都是对象。也看看这个问题。
>>>import os
>>>issubclass(type(os), object)
True
>>>hasattr(os, 'kill')
True
>>>