首先,我要坦白,我没有完全掌握python中的Super函数。 好吧,我知道它是用来从父类或兄弟类访问继承的方法的,并且在创建类时,我会以相同的方式每次使用此函数:
class ClassName(nn.Module):
def __init__(self)
super(ClassName, self).__init__()
现在我遇到了这两种情况,我不明白:
第一个是init函数内部的“超级”,但内部带有参数:
super(ClassName, self).__init__(self.filters, self.filters*2, 3, padding=1, bias=False, **kwargs)
2。第二个是转发函数中的“超级”:
offsets = super(ClassName, self).forward(x)
请帮助我理解这些情况,希望通过它们我能够更好地掌握超级功能。
谢谢!
答案 0 :(得分:2)
@ albert905,super()函数用于以您提到的方式访问另一个Class函数。
您应该理解的是,调用该函数的方式与调用类内任何函数的方式相同。
所以,如果我有一个父类,例如:
class ParentClass():
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
然后,当您创建子类并调用super方法时,应添加与父类要求的参数相同的参数,因此可能的子类为:
class ChildClass(ParentClass):
def __init__(self)
super(ClassName, self).__init__("var1 Value", "var2 Value")
您看到的是,我传递的参数与仅实例化父类的参数相同,例如:
parent1 = ParentClass("var1 Value", "var2 Value")
您从ParentClass使用的任何函数的逻辑都是相同的。如果需要参数,则应使用super
函数将其传递。
在您的示例中,您在x
类的调用中传递了forward
,因为此函数需要一个参数。
PS:在您提到的第一类class ClassName(nn.Module)
的情况下,您应该确切地了解nn.Module
实现的方法,以便了解super()
所调用的功能就论点而言