python:super()如何在子类的函数中工作?

本问题已经有最佳答案,请猛点这里访问。

我有一个类结构定义如下:我不明白的是,Super()如何在基类的函数中使用超类的代码?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Std(object):    
    def __init__(self):
        self.W = defaultdict(int)

    def update(self, vect, label):
        self.bias += label
        for k, v in vect.items():
            self.W[k] += v * label
class Avg(Std):
    def __init__(self):
        super(Avg, self).__init__()
        self.U = defaultdict(int)
        self.beta = 0

    def update(self, vect, label):
        super(Avg, self).update(vect, label)
        self.beta += label * self.count
        for k, v in vect.items():
            self.U[k] += v * label * self.count

谁能给我解释一下Avg类的update方法中实际有多少行代码? Super()是如何工作的?


super()是对超类方法的调用。在您的示例中,对Avg类中的update方法的调用将首先使用在这一行super(Avg, self).update(vect, label)中传递的vect和label参数准确地执行Std类中的update方法。然后,它将运行您在超级调用之后编写的其余代码。

你的Avg更新方法相当于

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Avg(Std):
    def __init__(self):
         super(Avg, self).__init__()
         self.U = defaultdict(int)
         self.beta = 0

    def update(self, vect, label):
         self.bias += label
         for k, v in vect.items():
             self.W[k] += v * label

         self.beta += label * self.count
         for k, v in vect.items():
             self.U[k] += v * label * self.count