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

Python 3.7如何优雅获取类中的嵌套内部类?

获取类中嵌套内部类的Python实现方案

Python 3.7没有专门的内置方法直接返回类的所有嵌套内部类,但可以通过遍历类属性或借助标准库实现自动收集,无需手动维护列表。

方法一:遍历类的__dict__属性

直接遍历类的__dict__字典,筛选出其中的类对象:

class Mixins:
    class B:
        pass

    class C:
        pass

    @classmethod
    def __all_subclasses__(cls):
        # 筛选出属于当前类的嵌套类,排除类本身
        return [attr for name, attr in cls.__dict__.items()
                if isinstance(attr, type) and attr is not cls]

b = Mixins.B()
print(Mixins.__all_subclasses__())
# 输出: [<class '__main__.Mixins.B'>, <class '__main__.Mixins.C'>]

这段代码通过isinstance(attr, type)判断属性是否为类对象,同时排除当前类本身(避免误判),自动收集所有嵌套内部类。

方法二:借助inspect标准库

如果需要更严谨的筛选(比如排除外部导入的类),可以使用Python自带的inspect模块:

import inspect

class Mixins:
    class B:
        pass

    class C:
        pass

    @classmethod
    def __all_subclasses__(cls):
        # 仅收集当前模块下定义的嵌套类
        return [attr for name, attr in inspect.getmembers(cls)
                if inspect.isclass(attr) 
                and attr.__module__ == cls.__module__ 
                and attr is not cls]

print(Mixins.__all_subclasses__())
# 输出: [<class '__main__.Mixins.B'>, <class '__main__.Mixins.C'>]

inspect.getmembers会返回类的所有成员,inspect.isclass精准判断类对象,__module__校验确保是当前模块定义的类,避免混入外部类。

注意:Python的__subclasses__()方法是返回当前类的子类(继承关系的子类),并非嵌套在类内部的类,所以不能直接用于你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:15:44