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

Python super()如何在子类的函数中工作?,python,Python,我的类结构定义如下: 我不明白的是,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 *

我的类结构定义如下: 我不明白的是,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类的update方法中实际有多少行代码,以及Super()在这里是如何工作的吗

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

您的平均更新方法相当于

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

super()
允许您访问类MRO中另一个类的现有方法;这意味着您只需调用另一个方法,其中一个方法可以与实例上已存在的方法具有完全相同的名称。super从基类调用该方法。至于有多少行代码,你可以数一数。@DanielRoseman说“基类”是错误的。它并不总是调用基类,它可以调用同级类。它不调用任何东西,它获取对下一个类的引用;然后可以对其调用一个方法。