You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed/awk提取继承BaseClass的Python子类及函数

使用Awk提取继承自BaseClass的子类及函数(含文件路径)

下面是一个Awk脚本,可以批量处理Python代码文件,自动提取所有继承自BaseClass的子类名称、函数声明,并输出对应文件路径:

完整Awk脚本

将以下内容保存为extract_subclasses.awk:

BEGIN {
    in_target_class = 0
    class_name = ""
}

FILENAME != prev_filename {
    if (prev_filename != "") {
        print "---"
    }
    print "文件路径: " FILENAME
    prev_filename = FILENAME
    in_target_class = 0
    class_name = ""
}

# 匹配继承BaseClass的类定义行
/^class [A-Za-z0-9_]+.*\(.*BaseClass.*\):/ {
    split($0, parts, /class |\(/)
    class_name = parts[2]
    print "子类定义: " $0
    in_target_class = 1
    next
}

# 捕获目标类内的函数声明
in_target_class && /^[[:space:]]*def [A-Za-z0-9_]+\(/ {
    sub(/^[[:space:]]*/, "", $0)
    print "  函数: " $0
}

# 遇到非目标类时退出跟踪状态
/^class / && !/BaseClass/ {
    in_target_class = 0
}

使用方法

1. 处理单个/多个文件

在终端运行:

awk -f extract_subclasses.awk path/to/file1.py path/to/file2.py

2. 递归遍历整个代码库

结合find命令处理所有子目录下的.py文件:

find /path/to/your/code -name "*.py" -exec awk -f extract_subclasses.awk {} +

示例效果

假设存在文件src/utils/data_processor.py,内容如下:

class BaseClass:
    def base_method(self):
        pass

class DataProcessor(BaseClass):
    def load_dataset(self, path):
        pass

    def preprocess(self, data):
        return data

class TempClass:
    def temp_func(self):
        pass

运行脚本后输出:

文件路径: src/utils/data_processor.py
子类定义: class DataProcessor(BaseClass):
  函数: def load_dataset(self, path):
  函数: def preprocess(self, data):
---

注意事项

  • 脚本假设类定义为单行格式(如class X(BaseClass):),如果你的代码有多行继承定义(比如跨线写父类),需要调整正则表达式适配。
  • 会捕获类内所有以def开头的函数,包括特殊方法(如__init__、__str__)。
  • 输出中的---分隔符用于区分不同文件的结果,方便阅读。

内容的提问来源于stack exchange,提问作者Bitdiot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:51:12