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

如何在Python/PyQt5中仅获取用户自定义类?

只获取用户自定义类的解决方案

你的核心问题是当前代码会遍历模块中所有成员(包括导入的PyQt类),导致循环次数过多。要精准获取自定义类,关键是判断类的定义模块是否为当前目标模块,而非外部库。

优化思路

自定义类的__module__属性会指向它被定义的模块名,而导入的外部类(如QWidget)的__module__是其所属的外部库模块(比如PyQt5.QtWidgets)。利用这一点可以精准过滤。

修改后的代码

文件:identify_user_defined_class

import importlib
import inspect

file_list =["identify_user_defined_class_base"]
list_class =[]
dict_class = {}

aa = 0

for items in file_list:
    module_name = importlib.import_module(items)
    current_module_name = module_name.__name__  # 获取当前模块名称

    for class_name, class_obj in inspect.getmembers(module_name):
        aa += 1
        print("bbbbb", aa, class_name, class_obj)
        # 过滤条件:是类,且定义在当前模块中
        if inspect.isclass(class_obj) and class_obj.__module__ == current_module_name:
            source, start_line = inspect.getsourcelines(class_obj)
            list_class.append([start_line, class_name])
            dict_class.update({class_name: class_obj})
    list_class.sort()

效果说明

  • 替换原有的字符串截取判断为class_obj.__module__ == current_module_name,彻底避免了字符串匹配的脆弱性。
  • 现在只会遍历到当前模块中定义的A、B、C三个类,循环次数大幅减少,不会再处理导入的PyQt类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:10:22