关于super方法的一个问题
在pytorch中定义一个神经网络模型:import torch
class MyNet(torch.nn.Module):
def __init__(self):
super(MyNet, self).__init__()# 第一句话,调用父类的构造函数
self.conv1 = torch.nn.Conv2d(3, 32, 3, 1, 1)
self.relu1=torch.nn.ReLU()
self.max_pooling1=torch.nn.MaxPool2d(2,1)
self.conv2 = torch.nn.Conv2d(3, 32, 3, 1, 1)
self.relu2=torch.nn.ReLU()
self.max_pooling2=torch.nn.MaxPool2d(2,1)
self.dense1 = torch.nn.Linear(32 * 3 * 3, 128)
self.dense2 = torch.nn.Linear(128, 10)
为什么要用这一句呢: super(MyNet, self).__init__(),我输出的继承层级关系只有一层:
,super不是多继承的时候用的吗?求dalao指点一下 本帖最后由 sunrise085 于 2020-3-18 09:03 编辑
在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层继承关系,需要调用父类初始化函数时也需要调用super
你所谓的多继承时调用super,可能有误解,看看这个帖子的多继承初始化。
sunrise085 发表于 2020-3-18 09:00
在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层 ...
但是如果调用父类的构造函数不是应该用super(参数).__init__(),这里的super是当前类 御笔剑客 发表于 2020-3-18 09:14
但是如果调用父类的构造函数不是应该用super(参数).__init__(),这里的super是当前类
你这里只有一层继承关系,super的参数可以写也可以不写,但是写的话就写当前类,不能写父类名。这个涉及到__mro__列表的使用。__mro__列表主要是在多继承的情况下使用的。但是也适用于你这种一层继承关系。你看一下我给你的连接,那个帖子中我有一些说明,或许能解释你的疑惑。 super是单继承和多继承都可以用吧 sunrise085 发表于 2020-3-18 09:00
在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层 ...
懂了,谢谢dalao 看不懂,学习一下 学习了 有用 难道super不是单继承和多继承都可以用吗。。。 还没学到,学习一下~
页:
[1]