Python超函数与usu不同

2022-05-21 07:03:23 发布

您现在位置:Python中文网/ 问答频道 /正文

首先我要承认,我没有完全掌握python中的超级函数。 我知道它是用来从父类或同级类访问继承的方法的,每次创建类时,我都以同样的方式使用这个函数:

class ClassName(nn.Module):

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

现在我遇到了这两个案例,我不明白:

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

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

2.第二个是转发函数中的“super”:

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

请帮助我理解这些例子,我希望通过它们我能够更好地掌握超级函数

谢谢


Tags: 方法函数self参数initdef方式nnfilters案例classmodulesuper父类classname
1条回答
网友
1楼 ·

@albert905,super()函数是用来访问另一个类函数的

您应该理解的是,调用这个函数的方式与调用类中任何函数的方式相同

如果我有一个父类,比如:

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函数传递它们

对于您的示例,您传递了xforward类的调用,因为此函数需要一个参数

PS:在您提到的第一个类class ClassName(nn.Module)中,您应该准确地理解nn.Module实现的方法,以便理解super()调用的函数在参数方面需要什么