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

自身类中调用super()的作用解析:以DuelCNN继承nn.Module为例

在类中调用super()的作用详解

首先得明确:Python里的super()是用来调用方法解析顺序(MRO)链中当前类的前一个类的方法,核心是协助实现继承体系中的方法复用。

先纠正你举的第二个例子里的问题:你写的代码其实会报错,因为B并没有继承A,super(A, self)要求self(B的实例)必须是A的子类实例,否则会抛出TypeError。正确的写法应该是让B继承A:

class A:
    def __init__(self):
        self.x = 1
class B(A):
    def __init__(self):
        super(B, self).__init__()

这时super(B, self).__init__()才会调用父类A的__init__方法,让B的实例拥有x=1的属性。如果是Python 3+,还可以简化成super().__init__(),不需要显式传入类和实例参数,解释器会自动推导。

再看你提到的PyTorch示例:

class DuelCNN(nn.Module):
    def __init__(self, output_size: int):
        super(DuelCNN, self).__init__()

这里DuelCNN继承了PyTorch的nn.Module类,调用super(DuelCNN, self).__init__()的核心作用是触发父类nn.Module的初始化逻辑:

  • 完成PyTorch模块的基础配置,比如注册所有可学习的参数(后续定义的卷积层、全连接层等)
  • 初始化模块的默认设备(CPU/GPU)
  • 设置模块的训练/评估模式标记
  • 为后续的forward传播、参数优化、设备迁移等功能提供基础支持

简单说,这是PyTorch自定义模块的标准操作——如果不调用父类的__init__,你的DuelCNN模块无法正常工作,比如无法用.to()方法移动到GPU,也无法被优化器识别并更新参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:20:28