Python超级功能-与往常不同

时间:2018-12-02 15:01:04

标签: python

首先,我要坦白,我没有完全掌握python中的Super函数。 好吧,我知道它是用来从父类或兄弟类访问继承的方法的,并且在创建类时,我会以相同的方式每次使用此函数:

class ClassName(nn.Module):

    def __init__(self)
         super(ClassName, self).__init__()

现在我遇到了这两种情况,我不明白:

  1. 第一个是init函数内部的“超级”,但内部带有参数:

    super(ClassName, self).__init__(self.filters, self.filters*2, 3, padding=1, bias=False, **kwargs)
    

2。第二个是转发函数中的“超级”:

    offsets = super(ClassName, self).forward(x)

请帮助我理解这些情况,希望通过它们我能够更好地掌握超级功能。

谢谢!

1 个答案:

答案 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()所调用的功能就论点而言