当我从该模块中获取类时,如何检索模块路径

时间:2010-03-10 14:32:45

标签: python

在python中,如果我有一个类foo,我可以call foo.__module__获取一个字符串,其中包含所属模块的名称。

如果我有一个模块bar,我可以调用bar.__file__来获取一个字符串,其中包含加载模块的路径。

如果我只有类foo,我可以获得它所属模块的路径吗? (foo.__module__返回一个字符串,而不是它命名的模块的实例)

2 个答案:

答案 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文件 - 这不是什么大问题,而是一个更有用的“规律性”