如何找到定义Python类的位置
假设我在Python项目中有一个数字,我想知道在哪个包/模块中定义了一个特定的类(我知道类名)。有什么有效的方法吗?让我们举例说明如何找到定义Python类的位置,python,Python,假设我在Python项目中有一个数字,我想知道在哪个包/模块中定义了一个特定的类(我知道类名)。有什么有效的方法吗?让我们举例说明 import numpy print numpy.__file__ 给予 /usr/lib64/python2.7/site-packages/numpy/__init__.pyc 在我的机器上 如果您只有一个类,则可以将该类与python2 icimp模块一起使用: #let unknownclass be looked for import imp mo
import numpy
print numpy.__file__
给予
/usr/lib64/python2.7/site-packages/numpy/__init__.pyc
在我的机器上
如果您只有一个类,则可以将该类与python2 icimp
模块一起使用:
#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
from stl import stl
import inspect
print inspect.getmodule(stl.BaseStl).__file__
如您所见,
\uuu模块\uuuu
属性可能就是您要查找的内容。让我们通过示例进行解释
import numpy
print numpy.__file__
给予
/usr/lib64/python2.7/site-packages/numpy/__init__.pyc
在我的机器上
如果您只有一个类,则可以将该类与python2 icimp
模块一起使用:
#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
from stl import stl
import inspect
print inspect.getmodule(stl.BaseStl).__file__
正如您所看到的,您可能正在查找
\uuuuuuuuuuuuuuuuuuuuuuuuu
属性。获取类位置的一种方法是结合使用类的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu模块属性和sys.modules
字典
例如:
import sys
from stl import stl
module = sys.modules[stl.BaseStl.__module__]
print module.__file__
我应该注意的是,这并不总是给出正确的模块,它只是给出了从哪里得到它的模块。一种更彻底(但速度较慢)的方法是使用inspect
模块:
#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
from stl import stl
import inspect
print inspect.getmodule(stl.BaseStl).__file__
获取类位置的一种方法是结合使用类的\uuuu module\uuu
属性和sys.modules
字典
例如:
import sys
from stl import stl
module = sys.modules[stl.BaseStl.__module__]
print module.__file__
我应该注意的是,这并不总是给出正确的模块,它只是给出了从哪里得到它的模块。一种更彻底(但速度较慢)的方法是使用inspect
模块:
#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
from stl import stl
import inspect
print inspect.getmodule(stl.BaseStl).__file__
您可以使用模块获取定义模块/包的位置
inspect.getmodule(my_class)
样本输出:
<module 'module_name' from '/path/to/my/module.py'>
根据文件,
inspect.getmodule(对象)
尝试猜测对象是在哪个模块中定义的
您可以使用模块获取定义模块/包的位置
inspect.getmodule(my_class)
样本输出:
<module 'module_name' from '/path/to/my/module.py'>
根据文件,
inspect.getmodule(对象)
尝试猜测对象是在哪个模块中定义的
你是以编程方式还是一般方式提问?相关:@stazima任何方式都适用于我。你是以编程方式还是一般方式提问?相关:@stazima任何方式都适用于我。这给出了模块/包的位置,而不是类的位置。python就是这样工作的;模块有包含类的文件。当然,可能会有基于文件名的自动类查找,但通常情况下,类不一定来自文件,因此这并不是python所能期望的——在许多情况下,查找类所来自的模块是最接近的。确实如此,但这也让它成为了另一个问题的答案:)不是否决,而是指出它。@Wolph:你喜欢我的最后一段吗?更好,伟大的改变:)它给出了模块/包的位置,而不是类的位置。python就是这样工作的;模块有包含类的文件。当然,可能会有基于文件名的自动类查找,但通常情况下,类不一定来自文件,因此这并不是python所能期望的——在许多情况下,查找类所来自的模块是最接近的。确实如此,但这就让它成为了另一个问题的答案:)不是投反对票,而是指出它。@Wolph:你喜欢我的最后一段吗?更好,变化很大:)你知道猜测部分的意思吗?什么时候会出错?使用inspect.getmodule(my_类)。\uuu file\uuu
获取猜测的文件名。您知道猜测部分的含义吗?什么时候会出错?使用inspect.getmodule(my_类)。\uu文件\uu
获取猜测的文件名。