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

如何在Python的Test类中获取传入的Art类的父类?

获取传入类的所有父类的解决方案

嘿,我来帮你搞定这个问题!你想要在Test类内部拿到传入的Art类的所有父类(也就是Artists和Base),其实不用纠结super()——它主要是用来在类方法里调用父类的方法,针对的是当前类或实例的继承链,而我们这里要处理的是传入的另一个独立类,用Python内置的类属性就能轻松解决。

直接修改后的代码实现

这里给你两种可行的方案,你可以根据需求选:

方案1:递归收集所有层级的父类(包括间接继承的)

这种方式会把所有父类(比如Art的直接父类Artists,以及Artists的父类Base)都收集起来:

# 先定义好继承链的类
class Base:
    pass

class Artists(Base):
    pass

class Art(Artists):
    pass

class Test(object):
    def __init__(self, name, myclass):
        self.name = name
        self.myclass = myclass
    
    def get_parents(self):
        all_parents = []
        
        # 递归函数,遍历每个类的父类
        def collect_parent_classes(cls):
            # 遍历当前类的直接父类
            for base_cls in cls.__bases__:
                # 排除默认的object类(如果需要保留可以去掉这个判断)
                if base_cls is not object:
                    all_parents.append(base_cls)
                    # 继续递归收集父类的父类
                    collect_parent_classes(base_cls)
        
        collect_parent_classes(self.myclass)
        return all_parents

# 测试代码
testobj = Test('testA', Art)
print(testobj.get_parents())
# 输出结果:[<class '__main__.Artists'>, <class '__main__.Base'>]

方案2:用__mro__快速获取所有父类

Python的每个类都有__mro__属性,它返回类的方法解析顺序元组,包含了从自身到最顶层父类的所有类。我们只要过滤掉自身和默认的object类就能得到所有父类:

class Test(object):
    def __init__(self, name, myclass):
        self.name = name
        self.myclass = myclass
    
    def get_parents(self):
        # 从MRO里过滤掉自身和object,剩下的就是所有父类
        return [cls for cls in self.myclass.__mro__ if cls not in (self.myclass, object)]

# 测试后同样会输出:[<class '__main__.Artists'>, <class '__main__.Base'>]

关键知识点说明

  • __bases__:每个类的这个属性会返回一个元组,包含该类直接继承的父类。比如Art.__bases__的结果是(<class '__main__.Artists'>,),Artists.__bases__是(<class '__main__.Base'>,)。
  • __mro__:全称是Method Resolution Order,它是Python用来查找方法的顺序链,包含了类本身、所有父类直到object。用它可以一次性拿到所有层级的继承关系,非常方便。
  • 为什么不用super():super()的作用是在类的方法中调用父类的方法,它依赖于当前类的上下文和实例的MRO,并不适合直接获取另一个类的父类结构,所以这里用类的内置属性是更直接的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:38:53