澄清/何时/何地在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读