从源代码获取Python类的起始和结束位置

2 投票
2 回答
617 浏览
提问于 2025-04-16 15:15

假设我有一个文件,里面定义了几个类,像这样:

class A:
    def somemethod(self): pass
    ...more methods...

class B:
    def othermethod(self): pass
    ....even more methods...

我怎么才能知道类 A 的定义从哪一行开始,到哪一行结束?类 B 又是从哪一行开始,到哪一行结束?如果我把这个文件加载到编辑器里,选中“Class A”这段文字,想在类 A 的定义末尾插入一个方法,我该怎么做呢?我觉得把源代码当作普通文本文件来读可能不太好。

有没有办法在不导入和检查的情况下,找出定义了哪些类,它们实现了哪些方法,哪些类是它们的子类等等?

总之,我需要知道这些东西的开始和结束位置,这样才能对源代码进行操作,比如给类添加方法,给现有的方法添加装饰器,从现有类中提取所有方法并创建一个新类,等等。

我的目标是为 Python 的 IDE/编辑器创建智能提示功能。

2 个回答

0

要从解析抽象语法树的角度来思考,而不是单纯看原始的代码行。即使是Python这种用换行而不是括号来区分代码的语言,也可以在一行中用分号写多个语句,或者用反斜杠把一个语句分成两行。

有很多方法可以做到这一点,但可以看看内置的ast包。

2

我建议你可以从Python的标准库中的一个类浏览器开始学习,这个类浏览器叫做 pyclbr

撰写回答