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

PyTorch中为何普遍使用super(class, self).__init__()而非super().__init__()?

关于PyTorch中super(class, self).__init__() vs super().__init__()的疑问解答

嘿,这个观察挺细致的!我来帮你理清这个问题:

首先先明确两种写法的本质区别:

  • super().__init__()是Python 3.0+引入的简化语法,它会自动推断当前类和实例对象,不用手动传入参数,写起来更简洁。
  • super(class, self).__init__()是Python 2时代的标准写法(Python 2里super必须传这两个参数),同时也兼容Python 3。

回到你关注的PyTorch场景,为什么很多论文代码不管Python版本都用旧写法?核心原因确实如你补充的那样,只有向后兼容性,没有PyTorch特有的实际原因,具体可以拆解成这几点:

  • 「兼容旧环境」:虽然Python 2已经停止维护,但有些科研团队的运行环境、老项目依赖可能还停留在Python 2,或者需要同时支持Python 2和3的混合环境,统一用旧写法能避免在不同环境下出现语法错误。
  • 「历史习惯延续」:很多早期PyTorch项目是在Python 2还流行时启动的,后续迭代时开发者保持了原有代码风格;还有不少开发者已经习惯了旧写法,觉得手动传参数更明确,没必要特意改成新语法。
  • 「无PyTorch专属限制」:PyTorch对两种写法的支持完全一致,不管用哪种,调用父类__init__的逻辑、模型的功能和性能都不会有任何差异——这一点可以完全放心。

总结一下:你并没有多虑,这种写法的选择确实只是为了向后兼容,再加上代码习惯的延续,不存在PyTorch层面的特殊考量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:18:17