Python子类调用父类__init__的区别
Python子类调用父类__init__的区别
问题出现
在使用框架来编写深度学习模型时,经常要继承框架提供的父类。
1 |
|
然后通常我们要调用父类的构造方法
1 |
|
然而我之前学习到的调用父类构造方法的用法是
1 |
|
因此就想知道这两种调用的方式有什么区别。
通过查询资料,有两种说法,一种是说只有带参数调用才能将父类的操作应用到子类身上,另一种说法是带参数调用是Python2的语法,在Python3中可以直接用不带参数的语法替代。
问题验证
我们编写一个父类,然后编写两个子类用不同的方式来调用父类的__init__方法
父类
1
2
3class SuperClass:
def __init__(self):
self.a = 'hello'带参数调用
1
2
3class SubClass1(SuperClass):
def __init__(self):
super(SubClass1, self).__init__()不带参数调用
1
2
3class SubClass2(SuperClass):
def __init__(self):
super().__init__()
然后我们创建两个子类的对象,查看它们之间是否有所不同
1 |
|
问题结果
通过执行结果可以发现,在Python3里两种方式没有任何区别,所以使用Python3的时候,就不用再多写这几个东西了。
Python子类调用父类__init__的区别
https://wellt.cn/2023/07/24/py-super-init-invoke/