Python嵌套类中super()调用失败,求助解决TypeError问题
解决嵌套类Dog调用Cat方法的问题
我来帮你搞定这个问题!你遇到的TypeError根源是误用了super()的用途——super()是为继承关系设计的,用来调用父类的方法,但你的Cat和Dog只是Parent类里的同级嵌套类,彼此没有继承关系,所以用super()去获取Cat实例完全不对,这才触发了报错。
错误原因拆解
你看到的报错TypeError: super(type, obj): obj must be an instance or subtype of type,本质是因为你可能尝试用super(Parent, self)(其中self是Dog的实例),但Dog并不是Parent的子类(它只是嵌套在Parent内部),不符合super()对参数的要求,所以报错。
正确实现方案
要让Dog调用Cat的方法,核心是让Dog的实例能访问到Parent实例中的Cat实例。我们可以在初始化Dog时,把Parent的实例传递给它,这样Dog就能通过这个引用拿到Cat。
修改后的完整代码:
class Parent(object): def __init__(self, *args, **kwargs): # 实例化内部类Cat,保存到Parent实例的属性中 self.ThisCat = self.Cat() # 初始化Dog时,把Parent自身的实例传进去,让Dog能关联到Cat self.ThisDog = self.Dog(self) class Cat: def cat_sound(self): """Cat类的示例方法""" print("🐱 喵呜~") class Dog: def __init__(self, parent_instance): # 保存外部类Parent的实例引用 self.parent = parent_instance def BarkToCat(self): # 通过Parent实例访问Cat实例,调用它的方法 self.parent.ThisCat.cat_sound() print("🐶 汪汪!对着猫叫") # 测试代码 animal = Parent() animal.ThisDog.BarkToCat()
代码说明
- 关联外部实例:在
Parent的__init__里,初始化Dog时传入self(也就是Parent的实例),这样Dog实例就持有了Parent的引用。 - 访问Cat实例:在
Dog的BarkToCat方法中,通过self.parent.ThisCat就能拿到Parent实例里的Cat对象,进而调用Cat的方法。 - 避免误用super:因为
Cat和Dog是同级嵌套类,没有继承关系,所以完全不需要用super()来实现交互。
内容的提问来源于stack exchange,提问作者jonuko
相关产品推荐
相关产品推荐

