モジュールに属性を動的に追加しています。使用する前に、追加された属性が (モジュール内に) 存在することを確認したいと考えています。
hasattr 署名は次のとおりです。
hasattr(object, name)
モジュールはオブジェクトではないので、追加された属性の存在を確認するにはどうすればよいですか?
モジュールに属性を動的に追加しています。使用する前に、追加された属性が (モジュール内に) 存在することを確認したいと考えています。
hasattr 署名は次のとおりです。
hasattr(object, name)
モジュールはオブジェクトではないので、追加された属性の存在を確認するにはどうすればよいですか?
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のオブジェクトです)。
実はオブジェです。Python のすべてはオブジェクトです。この質問も見てください。
>>>import os
>>>issubclass(type(os), object)
True
>>>hasattr(os, 'kill')
True
>>>