澄清/何时/何地在django / python中使用super
发布时间:2020-12-20 12:40:50 所属栏目:Python 来源:网络整理
导读:实际上我们知道super用于查找“父类”并返回其对象,例如/ using self .__ class __.__ mro__ 我很困惑的是什么时候使用它? 假设我们有一个示例模型代码,如下所示 VERSION_1 class Example(models.Model): name = models.CharField() age = models.IntegerFi
|
实际上我们知道super用于查找“父类”并返回其对象,例如/ using self .__ class __.__ mro__
我很困惑的是什么时候使用它? 假设我们有一个示例模型代码,如下所示 VERSION_1 class Example(models.Model):
name = models.CharField()
age = models.IntegerField()
def save(self,**args,**kwargs):
obj = super(Example,self).save(self,**kwargs)
obj.name = "name changed"
obj.age = "age changed"
return obj
VERSION_2 class Example(models.Model):
name = models.CharField()
age = models.IntegerField()
def save(self,**kwargs):
self.name = "name changed"
self.age = "age changed"
obj = super(Example,**kwargs)
return obj
所以我们可以在上面观察 在version_1中,我首先调用super并对字段进行了修改并返回了obj 在版本_2中,我修改了字段,之后调用了super并返回了obj 那么在修改字段之前和之后调用super时会发生什么? 最后我想知道/确认的是 >在django表格/模型中使用何处/为何精确超级. 解决方法
您的Example类是Model的子类.这意味着,该示例继承了Model中的所有函数.
请看以下内容: class Example():
pass
example = Example()
#let's try to save it
example.save()
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
AttributeError: Example instance has no attribute 'save'
现在继承. class Parent():
def save(*args,**kwargs):
print "saving now"
class Example(Parent):
pass
example = Example()
#since Example has no save method,it inherits the Parent's save method.
example.save()
"saving now"
如果覆盖Example类中的save()方法,则不会调用Parent的save方法. class Example(Parent):
def save(self,*args,**kwargs):
print "i know how to save on my own now"
example = Example()
example.save()
"i know how to save on my own now"
如果您选择调用super,则调用Parent的save函数以及您自己的save()实现. class Example(Parent):
def save(self,**kwargs):
super(Example,self).save(*args,**kwargs)
print "i know how to save on my own now"
example = Example()
example.save()
"saving now" #from parent
"i know how to save on my own" #from example
这同样适用于您继承的所有djangos类.实际上,实施更复杂.您可以在github查看模型定义. 如果您感到激动,可以使用此talk潜入django ORM (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读
