Python super()如何在子类的函数中工作?
我的类结构定义如下: 我不明白的是,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 *
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说“基类”是错误的。它并不总是调用基类,它可以调用同级类。它不调用任何东西,它获取对下一个类的引用;然后可以对其调用一个方法。