0

モジュールに属性を動的に追加しています。使用する前に、追加された属性が (モジュール内に) 存在することを確認したいと考えています。

hasattr 署名は次のとおりです。

hasattr(object, name)

モジュールはオブジェクトではないので、追加された属性の存在を確認するにはどうすればよいですか?

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 に答える
0

実はオブジェですPython のすべてはオブジェクトです。この質問も見てください。

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