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

Python中super(LR, self)语法疑问:为何看似类自继承?

问题解答

首先纠正你的误解:这段代码里的LR类并没有继承自自身,它的父类是PyTorch框架中的nn.Module(代码里写成了小写的nn.module是笔误,正确写法是大写开头的Module)。

接下来解释super(LR, self).__init__()的工作原理:

  • 在Python面向对象编程中,super()函数用于调用父类的方法。这里super(LR, self)会返回LR类父类(也就是nn.Module)的代理对象,调用它的__init__()方法,目的是让父类的初始化逻辑也能被执行。
  • 对于PyTorch的神经网络模块来说,这一步是必须的:nn.Module内部会完成参数注册、子模块管理等核心初始化工作,如果不调用父类的__init__(),你的LR类就无法正常作为PyTorch模型使用,后续的训练、参数优化等操作都会出问题。

用一个简单的Python原生OOP例子辅助理解:

class Parent:
    def __init__(self):
        print("执行父类初始化逻辑")

class Child(Parent):
    def __init__(self):
        super(Child, self).__init__()  # 调用父类的初始化方法
        print("执行子类初始化逻辑")

c = Child()
# 输出顺序:
# 执行父类初始化逻辑
# 执行子类初始化逻辑

回到你的PyTorch代码,super(LR, self).__init__()就是触发nn.Module的初始化流程,这样你定义的self.linear这个线性层才能被PyTorch正确识别和管理。

额外补充:在Python 3及以上版本中,super()可以简化为无参数写法super().__init__(),效果和super(LR, self).__init__()完全一致,所以你的代码也可以改成更简洁的版本:

def __init__(self, in_size, out_size):
    super().__init__()
    self.linear = nn.Linear(in_size, out_size)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:25:32