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
相关产品推荐
相关产品推荐

