可以在模块上运行吗?

时间:2013-10-22 07:33:56

标签: python

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

hasattr签名是:

hasattr(object, name)

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

4 个答案:

答案 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
    >>>