在pytorch库中nn.Module模块,声明继承Model类是有提示可以按照这样书写
class Model(nn.Module):
def __init__(self):
super(Model,self).__init__()
其中super类是作用是继承的时候,调用含有super各个基类的__init__函数,如果不使用super,就不会调用__init__函数,使用super可以避免基类被重复调用。
使用print(Model.__mro__)打印搜索顺序或者祖先树
super的典型用法:
在具有单一继承结果的类层级中,super可以指代父类而不需要显示声明,这样对更改父类有帮助的。
class A():
def fortest(self):
print('Call class A')
print('Leave class A')
class B(A):
def fortest(self):
print('Call class B')
A.fortest(self)
print('Leave class B')
sample=B()
sample.fortest()
print(B.__mro__)
运行的结果:
Call class B
Call class A
Leave class A
Leave class B
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
如果需要修改B的基类A为D,那么不仅需要修改声明Class B(D),函数体中的函数也需要进行修改,如果调用A的地方多,修改起来会比较麻烦,加上super则会简单很多
class A():
def fortest(self):
print('Call class A')
print('Leave class A')
class B(A):