在python中,如果我有一个类foo
,我可以call foo.__module__
获取一个字符串,其中包含所属模块的名称。
如果我有一个模块bar
,我可以调用bar.__file__
来获取一个字符串,其中包含加载模块的路径。
如果我只有类foo,我可以获得它所属模块的路径吗? (foo.__module__
返回一个字符串,而不是它命名的模块的实例)
答案 0 :(得分:6)
sys.modules
是从模块名称到模块的映射:
sys.modules[foo.__module__].__file__
答案 1 :(得分:4)
对于这样的内省任务,我总是建议使用Python标准库的inspect
模块:它可以处理一些极端情况& c并使整个过程更加顺畅。对于您的特定任务,inspect.getsourcefile可以很方便 - 例如,考虑......:
>>> from sched import scheduler as someclass
>>> import inspect
>>> inspect.getsourcefile(someclass)
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/sched.py'
这总是试图为您提供.py
文件,而不是有时提供.py
文件,有时候提供.pyc
文件 - 这不是什么大问题,而是一个更有用的“规律性”