super(NeuralNetwork, self).__init__() 与 super().__init__()

我们在浏览别人的代码,有的时候遇到 super(NeuralNetwork, self).__init__() ,也有的时候遇到什么都没有的情况,如 super().__init__(),这二者究竟有什么区别呢?

super(NeuralNetwork, self).__init__() super().__init__() 的区别在于第一个版本指定了当前类 NeuralNetwork,作为调用的方法所属的类,而后者则使用了当前类的默认值,即 self.__class__这两种方式在绝大多数情况下是等效的。

使用 super() 函数可以调用父类的方法,从而避免硬编码父类名称,这有助于提高代码的可维护性和可重用性。在 Python 3.x 中,可以省略 super() 中的参数,因为它们会自动检测当前类和实例。所以,如果你的代码运行在 Python 3.x 中,你可以只使用 super().__init__() 调用父类的构造函数。

什么是硬编码?💓

其定义也就是“将可变变量用一个固定数值表示”,这种方式在编码的过程中会导致变量很难修改。

在编程中,硬编码是指将值或行为直接嵌入代码中,而不是使用参数或配置文件来指定它们。如果在代码中硬编码了父类的名称,则在子类继承结构发生更改时,可能需要修改代码,以便在子类中调用正确的父类方法。这样的代码往往更难以维护和扩展,因为它需要手动进行修改,而不是自动适应更改。

class Parent:
    def __init__(self):
        print('Parent init')
        
class Child(Parent):
    def __init__(self):
        Parent.__init__(self)
        print('Child init')

在 Child 类中,调用 Parent 类的构造函数时,硬编码了 Parent 类的名称。如果我们稍后更改 Child 类的基类,这段代码就会出现问题,例如:

class GrandParent:
    def __init__(self):
        print('GrandParent init')
        
class Child(GrandParent):
    def __init__(self):
        Parent.__init__(self)  # 现在有问题
        print('Child init')

这个例子中,因为 Child 类的基类已经更改为 GrandParent,因此调用 Parent 类的构造函数是错误的。我们必须手动修改代码以反映这个更改,这是一个非常不便的过程。

相比之下,使用 super() 函数可以避免硬编码父类名称,例如:

class Parent:
    def __init__(self):
        print('Parent init')
        
class Child(Parent):
    def __init__(self):
        super().__init__()
        print('Child init')

这个例子中,我们使用 super() 函数来调用父类的构造函数,而不是硬编码 Parent 类的名称。因此,在更改 Child 类的父类时,我们不需要修改代码,因为 super() 函数会自动调用正确的父类构造函数。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉淀体育生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值