我有一个类结构定义如下: 我不明白的是,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()如何在这里工作?
答案 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