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

Python中如何调用父类方法?子类继承后父类方法调用咨询

在Python中正确访问父类方法的方式

嘿,我来帮你理清这个问题!你现在的思路有点偏哦——在Python里继承父类的时候,绝对不需要在子类构造函数里手动创建父类的实例,这完全搞错了继承的核心逻辑:继承本身就是让子类天然拥有父类的属性和方法,根本不需要额外实例化一个父类对象存起来。

正确的两种实现方式

1. 使用 super() 函数(推荐)

这是Python 3里最简洁、最推荐的写法,它会自动帮你定位到父类的对应方法,尤其是在多继承的复杂场景下,super()能帮你处理方法解析顺序(MRO)的问题,避免出错。

比如你的子类构造函数应该这么写:

class my_extended_class(my_class):
    def __init__(self):
        # 调用父类的构造方法,完成父类部分的初始化
        super().__init__()
        # 这里写子类专属的初始化逻辑,比如添加子类独有的属性

如果要重写foo方法,同时还要调用父类的foo功能,可以这么做:

def foo(self, *args, **kwargs):
    # 先调用父类的foo方法,复用父类的逻辑
    super().foo(*args, **kwargs)
    # 再写子类自己的操作逻辑,比如扩展功能
    print("这是子类foo方法的额外操作")

2. 直接调用父类的方法(老式写法)

这种写法在Python 2中比较常见,Python 3也兼容,但灵活性不如super()(比如多继承时容易出问题),适合简单的单继承场景:

class my_extended_class(my_class):
    def __init__(self):
        # 直接指定父类,传入self参数调用构造方法
        my_class.__init__(self)
        # 子类专属初始化逻辑

    def foo(self, *args, **kwargs):
        # 同样直接调用父类的foo方法
        my_class.foo(self, *args, **kwargs)
        # 子类自己的操作

为什么你的原方法不对?

你之前想的self.my_father = my_class()这种方式,本质上是组合(Composition),而不是继承(Inheritance):

  • 继承是子类“是一种(is-a)”父类,比如Dog继承Animal,表示狗是一种动物,天然拥有动物的特性;
  • 组合是子类“有一个(has-a)”父类实例,比如Car里有一个Engine实例,表示汽车有一个发动机。

你的需求是扩展父类,显然应该用继承,而不是组合——组合适用于需要在子类中使用另一个类的功能,但不需要子类成为该类的“一种”的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:07