鱼C论坛

 找回密码
 立即注册
查看: 1064|回复: 9

[已解决]关于super方法的一个问题

[复制链接]
发表于 2020-3-18 08:55:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在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__()  ,我输出的继承层级关系只有一层:
 [__main__.MyNet, torch.nn.modules.module.Module, object]
,super不是多继承的时候用的吗?求dalao指点一下
最佳答案
2020-3-18 09:00:24
本帖最后由 sunrise085 于 2020-3-18 09:03 编辑

在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层继承关系,需要调用父类初始化函数时也需要调用super

你所谓的多继承时调用super,可能有误解,看看这个帖子的多继承初始化。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-18 09:00:24 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

本帖最后由 sunrise085 于 2020-3-18 09:03 编辑

在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层继承关系,需要调用父类初始化函数时也需要调用super

你所谓的多继承时调用super,可能有误解,看看这个帖子的多继承初始化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 09:14:42 | 显示全部楼层
sunrise085 发表于 2020-3-18 09:00
在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层 ...

但是如果调用父类的构造函数不是应该用super(参数).__init__(),这里的super是当前类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 09:28:15 | 显示全部楼层
御笔剑客 发表于 2020-3-18 09:14
但是如果调用父类的构造函数不是应该用super(参数).__init__(),这里的super是当前类

你这里只有一层继承关系,super的参数可以写也可以不写,但是写的话就写当前类,不能写父类名。这个涉及到__mro__列表的使用。__mro__列表主要是在多继承的情况下使用的。但是也适用于你这种一层继承关系。你看一下我给你的连接,那个帖子中我有一些说明,或许能解释你的疑惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 09:42:25 | 显示全部楼层

回帖奖励 +5 鱼币

super是单继承和多继承都可以用吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 10:22:44 | 显示全部楼层
sunrise085 发表于 2020-3-18 09:00
在初始化类对象的时候若需要调用父类的初始化函数,则需要使用super函数,这与几层继承没有关系,只有一层 ...

懂了,谢谢dalao
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:27:27 | 显示全部楼层

回帖奖励 +5 鱼币

看不懂,学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 11:58:49 | 显示全部楼层

回帖奖励 +5 鱼币

学习了   有用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 11:33:52 | 显示全部楼层

回帖奖励 +5 鱼币

难道super不是单继承和多继承都可以用吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 11:38:58 | 显示全部楼层
还没学到,学习一下~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 12:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表