本文主要是介绍pytorch中的__init__()与super__init__()方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在 PyTorch 或其他面向对象编程中,__init__
和 super().__init__()
是用于初始化类的特殊方法。
__init__()
方法
定义:__init__
是 Python 类的构造函数,用于初始化类的实例。在一个类被实例化时,__init__
方法会自动被调用,负责设置对象的初始状态(如定义属性、初始化参数等)。
典型用法:
class MyClass:def __init__(self, param1, param2):self.param1 = param1self.param2 = param2
作用:
- 初始化类实例的属性。
- 设置对象的初始状态。
super().__init__()
方法
定义: super()
是一个内置函数,用于调用父类(超类)的一个方法,通常用于调用父类的构造函数 __init__
方法。这在类继承中非常重要,因为它确保了父类的初始化逻辑也会在子类中执行。
典型应用:
class Parent:def __init__(self, param1):self.param1 = param1class Child(Parent):def __init__(self, param1, param2):super().__init__(param1) # 调用父类的 __init__ 方法self.param2 = param2
作用:
- 在继承的子类中调用父类的初始化方法,确保父类的属性和行为能够被正确初始化。
- 允许在子类中扩展或修改父类的初始化逻辑,同时保留父类的基础功能。
__init__
和 super().__init__()
的区别
-
用途不同:
__init__
: 用于初始化当前类的实例,定义和设置类的属性。super().__init__()
: 用于调用父类的__init__
方法,确保父类的初始化逻辑在子类中被执行。
-
调用方式不同:
__init__
是类的实例化过程中自动调用的,而super().__init__()
需要在子类的__init__
方法中显式调用。
-
继承关系:
__init__
在每个类中都可以独立定义,而super().__init__()
则是在继承的上下文中使用,以确保父类的初始化逻辑被执行。
注意:super().__init__()
通常出现在自定义的神经网络模型中,虽然没有传入任何父类,但是他默认继承nn.module()的初始化方法。
import torch.nn as nnclass MyModel(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(MyModel, self).__init__() # 调用 nn.Module 的 __init__ 方法self.fc1 = nn.Linear(input_size, hidden_size)self.fc2 = nn.Linear(hidden_size, output_size)def forward(self, x):x = self.fc1(x)x = self.fc2(x)return x
这篇关于pytorch中的__init__()与super__init__()方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!