Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到定义Python类的位置_Python - Fatal编程技术网

如何找到定义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

假设我在Python项目中有一个数字,我想知道在哪个包/模块中定义了一个特定的类(我知道类名)。有什么有效的方法吗?

让我们举例说明

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
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 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
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
获取猜测的文件名。