【问题标题】:Finding which script contains a particular function or class查找包含特定函数或类的脚本
【发布时间】:2018-08-04 14:51:07
【问题描述】:

我怎样才能找到包含模块的特定函数或类的文件路径和正确的脚本?


示例:假设我想看一下tkinter.Button() 的tkinter 源代码。

我找到了__init__.py 文件在 tkinter 中的位置:

>>>import tkinter
>>>tkinter.__file__
'C:\\Users\\Simon\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\tkinter\\__init__.py'

我搜索了该文件夹,但找不到任何名为 Button 的函数或类。我的猜测是它包含在运行时而不是.py 文件中,但我不确定并且希望确定 对此。

我在Python documentation special attributes 中也找不到任何有用的东西。

欢迎提出任何建议,但请注意,这篇文章不仅针对 tkinter 模块,而且针对大多数包或模块,tkinter 只是一个示例。

【问题讨论】:

  • 并非所有 Python 中的类都以 Python 代码的形式实现,有些东西是在本机编译的扩展中实现的。 tkinter 对象在 Python 中从名为 Tk 的 C 库中公开。
  • @MartijnPieters 谢谢。所以我需要查看 C 源代码而不是 Button() 属性的 Python 代码?

标签: python module


【解决方案1】:

tkinter 对象未作为 Python 源代码实现。见tkinter documentation

Tk 接口位于名为 _tkinter 的二进制模块中。该模块包含 Tk 的低级接口,应用程序员绝不应直接使用。它通常是一个共享库(或 DLL),但在某些情况下可能与 Python 解释器静态链接。

请参阅Tcl/Tk documentation tkinter 库文档链接。 Tcl/Tk 文档又链接到 https://core.tcl.tk/,这是该项目开发的中心枢纽(在 Python 之外)。

从那里通过链接可以找到GitHub mirror of the project source code,其中包括Tk source,您可以在其中找到tkButton.c source file;这是核心按钮小部件实现。

有一些Python code involved as well,但那里的类定义大多只是将命令传递给本机 Tk 库。

【讨论】:

  • 因此,如果我想查看Button() 课程,我需要降低级别。非常感谢您的详细帖子。
【解决方案2】:

欢迎提出任何建议,但请注意,这篇文章不仅设置在 >tkinter 模块上,还设置在大多数包或模块上,tkinter 只是一个示例。

这几乎可以回答您的问题(对于一般情况)How do I get the filepath for a class in Python?

我们也可以看到类Button(Widget)init中定义的,但这是@Martijn Pieters 所写的包装器。

【讨论】:

  • 谢谢你的回答,这对我很有帮助,所以我投票赞成,因为它确实回答了我的第二个问题,但接受了@Martijn Pieters 的回答,因为它描述了为什么它不是可能与tkinterButton() 的实际位置。再次感谢您。
猜你喜欢
  • 2023-02-21
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多