super()如何在子类的函数内部工作?

时间:2016-10-28 17:37:11

标签: python

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

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类的更新方法中实际存在多少行代码,Super()如何在这里工作?

1 个答案:

答案 0 :(得分:1)

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

您的平均更新方法等同于

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