0

我在处理数据库时注意到了一些事情,尤其是处理数据库的 python ORM。

save()以下是django中的函数示例:

def save(self, **kwargs):
    self.somevar = dosomething(self.someothervar)
    return super(<Your_Model_Here>, self).save()

同样在使用该功能的谷歌应用引擎中put()

def put(self, **kwargs):
    self.<some_var> = doSomething(self.someOtherVar)
    return super(<Entity>, self).save()

现在,我明白我们为什么要这样做,IIRC,我们这样做是因为我们没有手动编写put()orsave()函数,所以我们需要使用 super 调用才能正常运行。

有人可以给我一个更详细的解释为什么保存功能是这样的。save()我对它的理解是错误的,因为我只是通过编写代码来学习的,但是当我编写一个orput()函数时,我真的不(清楚地)理解发生了什么。

4

1 回答 1

1

您只是目睹了一个方法在子类中被覆盖。子类化的目的是重用代码并根据需要覆盖功能。有时,这涉及覆盖一个方法并调用其父级的部分。

super调用父类的方法。

这与根本不进行子类化完全相同:

def save(...):
   return super(MyClass, self).save(...)

反之,如果我们只编写一个没有 super 调用的方法,它就会完全取代父类方法的功能。

def save(...):
   print ("I have nothing to do with my parent class")

如果我们想补充功能(即保留旧的行为但添加一些额外的东西),我们使用 super 从新方法中调用原始方法。

def save(...):
   print ("I am called directly before the original parent method")
   return super(MyClass, self).save(...)
于 2013-06-21T16:58:25.147 回答