代码之家  ›  专栏  ›  技术社区  ›  Robert Christie

当我有一个来自模块的类时,如何检索模块路径

  •  1
  • Robert Christie  · 技术社区  · 16 年前

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

    bar ,我可以打电话 bar.__file__ 获取包含模块加载路径的字符串。

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   Ignacio Vazquez-Abrams    16 年前

    sys.modules 是从模块名称到模块的映射:

    sys.modules[foo.__module__].__file__
    
        2
  •  3
  •   Alex Martelli    16 年前

    对于此类自省任务,我始终建议使用Python标准库的 inspect 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 文件而不是 文件,有时是 .pyc 文件——不是什么大问题,而是一个更有用的“规律性”。