我正在参加「掘金·启航计划」
0 环境
- 编辑器:pycharm或者vscode
- 系统版本:windows10
- python版本:3.9.6
1 前言
当我一开始刚接触别人的项目时(刘姥姥进大观园的赶脚),当看到django每个app里的models.py,满眼望过去,就会看到各种super()的调用,一脸蒙,比如super().save,super().delete,如下截图:
第一次接触python的项目时,当时的疑问就是直接某某.删除/保存不就行啦,哪怕事后再看也是一目了然,但用super不仅复杂的,而且再回头看的话,还要稍微重新理一遍,岂不是很麻烦,而且为啥要绕个大圈子呢(对于新手也太不友好了吧,还有调用父类的方法究竟有什么好处呢)。
2 super
如下代码:我新建了Base类,只有一个run方法,另一个Demo类继承了Base类,定义了run和show方法,并且show方法调用run方法,结果如下图。
class Base:
def run(self):
print("Base run")
class Demo(Base):
def run(self):
print("Demo run")
def show(self):
super().run()
if __name__ == '__main__':
Demo().show()
一看到super().run()
,我们就知道调用了父类的方法,而不是Demo中的方法。那这里的super方法帮我们做了什么呢。别看这里的super方法里面空空如也,但它相当于super(Demo, self).run()
,如下图。
3 小结
没有遇到有点绕的super方法时,本能看到super方法,就知道调用的是父类的方法,但是它具体怎么调用的呢,比如
super().run()
就等同于super(Demo, self).run()
。