PyTorch中继承nn.Module的子类调用super(自身类名,self).__init__()的作用是什么
super 显式传入当前类与 self 参数的用法说明
你看到的是 Python 兼容旧版本的标准写法,和 Python 3 中常用的无参 super().__init__() 功能完全一致,作用都是调用父类的构造方法完成初始化。
两个参数的具体含义如下:
- 第一个参数为继承链查找的起始类:这里传入当前定义的类(比如示例中的
MobileNet、MobileNetSkipAdd),意思是从该类的父类开始向上查找要调用的__init__方法,跳过当前类自身的__init__实现,避免递归调用。 - 第二个参数为方法绑定的实例对象:传入当前类的实例
self,保证父类的初始化逻辑执行时,所有属性操作都作用在当前创建的实例上。
对应到你给出的 PyTorch 代码示例:
两个自定义类都继承自 PyTorch 的模型基类 nn.Module,super(MobileNet, self).__init__() 本质就是调用 nn.Module 的构造方法,完成模型参数管理、设备绑定、钩子注册等基础逻辑的初始化,只有执行完父类初始化,子类才能正常使用 PyTorch 提供的各类模型能力。
补充说明:Python 3 对
super做了语法糖优化,在类的实例方法内调用无参super()时,解释器会自动补全「当前类」和self两个参数,写法更简洁。不少需要兼容 Python 2 的老项目、或者习惯了旧版语法的开发者,还是会保留显式传参的写法,两种写法的执行逻辑没有任何差异。
内容的提问来源于stack exchange,提问作者etnamaid
相关产品推荐
相关产品推荐

