0

我正在向模块添加动态属性,在使用它之前我想验证添加的属性是否存在(在模块中)。

hasattr 签名是:

hasattr(object, name)

module 不是对象,那么如何验证添加的属性是否存在?

4

4 回答 4

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

如果您有一个带有模块名称的字符串,那么您可以在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
于 2013-10-22T07:36:56.810 回答
2
>>> import os
>>> hasattr(os, 'path')
True
>>>

如您所见hasattr,适用于模块(python 中的一切都是对象,包括函数和模块)。

于 2013-10-22T07:37:48.430 回答
1

为什么不?

>>> import sys

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

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

>>> hasattr(sys, 'argv')
True
于 2013-10-22T07:41:02.580 回答
0

实际上,它一个对象。python 中的一切都是对象。也看看这个问题。

    >>>import os
    >>>issubclass(type(os), object)
    True
    >>>hasattr(os, 'kill')
    True
    >>>
于 2013-10-22T07:38:39.170 回答