python - 为什么我们在 super.save() 中使用 * args 和 **kwargs
问题描述
据我所知,*args
是一个元组,**kwargs
是一个字典,super.save()
用于覆盖内置的保存方法并确保save()
调用
但我不明白为什么我们在这里使用作为参数**
def save(self,*args,**kwargs):
super.save(*args,**kwargs)
解决方案
TL; DR:
您通过了*args
,**kwargs
因为您的super.save()
方法接受这些参数,并且必须将其传递给引用才能正确执行而不会出现错误。
长解释:
认为你super()
是继承类的网关,你可以通过调用父类的方法super()
。当您说要覆盖父方法中的某些内容时,您一定只想添加到现有方法提供的内容中。
像这样:
def save(self,*args,**kwargs):
self.request.user = get_current_logged_in_user() <--- Some validation or cleaning you want to do here.
super.save(*args,**kwargs)
如果您想完全阻止save()
从父类中执行该方法的所有实现,您只需删除super.save(*args,**kwargs)
您的 def 内部save()
,但现在您将必须实现有关如何save()
处理该方法的自定义解决方案这可以打开数据库连接,验证数据进入,触发查询以将数据保存在数据库中,将更改提交到数据库,最后关闭数据库连接。
def save(self):
# Open a db connection with url, user, password of your db
# Validate the incoming data
# Query the db
# Commit the query
# Close db connection
推荐阅读
- python - 为什么numpy数组在索引时返回错误的子数组形状
- python - 转义后如何检查控制台中的输出?
- file - 使用 perl 从文件中读取一行
- javascript - 在 JavaScript 中用数字处理字符串
- javascript - 如何在 vue.js 中映射数组
- node.js - node.js 中不存在相关 ID
- r - 在最近的 blogdown 更新后,无法将新的 .Rmd 文件呈现为 html
- c++ - 如何在do while循环中输出正的最小数字?
- c++ - 在 C++ 中放置一个负索引
- python - 为什么这个递归函数会输出多个结果/可能性?这是数独解谜程序代码的一部分