【发布时间】:2013-06-21 16:51:15
【问题描述】:
我在处理数据库时注意到了一些事情,尤其是处理数据库的 python ORM。
以下是 django 中 save() 函数的示例:
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() 或 save() 函数,所以我们需要使用 super 调用才能正常运行。
谁能给我一个更详细的解释为什么保存功能是这样的。我对它的理解是错误的,因为我只是通过进入和编码来学习的,但是当我编写 save() 或 put() 函数时,我真的不(清楚地)理解发生了什么。
【问题讨论】:
-
这就是继承在 Python 中的工作方式。也许您来自其他自动调用父类构造函数的语言;在 Python 中,您必须显式调用它。
-
不,我明白这是如何工作的,只是我不明白我们将子类放入 super 调用的部分,然后我们只是类型转换它?
-
Python 有多重继承,所以
super函数必须检查祖先以查看应该调用什么方法(有一个称为“钻石模式”的预定义顺序,其中将查看祖先)。
标签: database django google-app-engine orm