如何找到Python类的定义位置

时间:2015-07-10 17:03:12

标签: python

让我们说我在Python项目中有一个数字,我想找出一个特定类定义的包/模块(我知道类名)。有没有一种有效的方法呢?

3 个答案:

答案 0 :(得分:9)

您可以使用inspect模块获取定义模块/包的位置。

inspect.getmodule(my_class)

示例输出:

<module 'module_name' from '/path/to/my/module.py'>

根据文档,

  

inspect.getmodule(对象)
  尝试猜测对象的定义位置。

答案 1 :(得分:0)

让我们通过例子解释

import numpy
print numpy.__file__

给出

/usr/lib64/python2.7/site-packages/numpy/__init__.pyc

在我的机器上。

如果您只有一个类,则可以将该类与python2-ic imp模块一起使用:

#let unknownclass be looked for

import imp

modulename = unknownclass.__module__
tup = imp.find_module(modulename)
#(None, '/usr/lib64/python2.7/site-packages/numpy', ('', '', 5))
print "path to module", modulename, ":", tup[1]
#path to module numpy : /usr/lib64/python2.7/site-packages/numpy

如您所见,__module__属性可能正是您所寻找的。

答案 2 :(得分:0)

获取类位置的一种方法是使用类的var size属性和__module__字典的组合。

示例:

sys.modules

我应该注意,这并不总是给出正确的模块,它只是给你从哪里获得它的模块。更彻底(但更慢)的方法是使用import sys from stl import stl module = sys.modules[stl.BaseStl.__module__] print module.__file__ 模块:

inspect