当前位置: 首页 > news >正文

三台建设局网站滕州网站建设公司

三台建设局网站,滕州网站建设公司,关键词网络推广企业,宁波seo网页怎么优化super关键字的用法 一、概述二、作用三、语法四、使用示例1.通过super() 来调用父类的__init__ 构造方法:2.通过supper() 来调用与子类同名的父类方法2.1 单继承2.2 多继承 一、概述 super() 是python 中调用父类(超类)的一种方法&#xff0…

super关键字的用法

  • 一、概述
  • 二、作用
  • 三、语法
  • 四、使用示例
    • 1.通过super() 来调用父类的__init__ 构造方法:
    • 2.通过supper() 来调用与子类同名的父类方法
      • 2.1 单继承
      • 2.2 多继承

一、概述

super() 是python 中调用父类(超类)的一种方法,在子类中可以通过super()方法来调用父类的方法。
超类: 是指 2层以上的继承关系,假如 C类继承B类,B类由继承A类,那么A类就是C类的超类

二、作用

  • 使用继承时,让代码维护更加简单
  • 解决多继承带来的重复调用(菱形继承)、查找顺序(MRO)问题

三、语法

 super(type[, object-or-type])

其中:
type – 类。
object-or-type – 类,一般是 self
注:Python 3 和 Python 2 的另一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx

四、使用示例

1.通过super() 来调用父类的__init__ 构造方法:

class Person():def __init__(self):print('我是Peson的__init__构造方法')class Student(Person):def __init__(self):super().__init__()print'我是Student的__init__构造方法')stu = Student()

运行结果:
在这里插入图片描述

2.通过supper() 来调用与子类同名的父类方法

2.1 单继承

在单继承中 super 就像大家所想的那样,主要是用来调用父类的方法的。

class A:def __init__(self):self.n = 2def add(self, m):print('self is {0} @A.add'.format(self))self.n += mclass B(A):def __init__(self):self.n = 3def add(self, m):print('self is {0} @B.add'.format(self))super().add(m)self.n += 3
b = B()
b.add(2)
print(b.n)

输出结果:
在这里插入图片描述

1、super().add(m) 确实调用了父类 A 的 add 方法。
2、super().add(m) 调用父类方法 def add(self, m) 时, 此时父类中 self 并不是父类的实例而是子类的实例, 所以 b.add(2) 之后的结果是 5 而不是 4

2.2 多继承

在多继承中,会涉及到一个MRO(继承父类方法时的顺序表) 的调用排序问题。即严格按照MRO 顺序执行super方法

class A:def __init__(self):self.n = 2def add(self, m):print('self is {0} @A.add'.format(self))self.n += mclass B(A):def __init__(self):self.n = 3def add(self, m):print('self is {0} @B.add'.format(self))super().add(m)self.n += 3class C(A):def __init__(self):self.n = 4def add(self, m):print('self is {0} @C.add'.format(self))super().add(m)self.n += 4class D(B, C):def __init__(self):self.n = 5def add(self, m):print('self is {0} @D.add'.format(self))super().add(m)self.n += 5d = D()
d.add(2)
print(d.n)
out:
self is <__main__.D object at 0x10ce10e48> @D.add
self is <__main__.D object at 0x10ce10e48> @B.add
self is <__main__.D object at 0x10ce10e48> @C.add
self is <__main__.D object at 0x10ce10e48> @A.add
19

同样,不管往上调用几次,调用父类方法中 self 并不是父类的实例而是子类的实例,在上例中都是D的实例化对象
D.mro() == [D,B, C, A, object] ,多继承的执行顺序会严格按照mro的顺序执行。
整体的调用流程图如下:

在这里插入图片描述
在这里插入图片描述
1.super().__init__相对于类名.init,在单继承上用法基本无差别
2.但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次。
3.多继承时,使用super方法,对父类的传参数,应该是由于python中super的算法导致的原因,必须把参数全部传递,否则会报错
4.单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错

http://www.yayakq.cn/news/650070/

相关文章:

  • 怎样制作网站?成都租车公司网站
  • 陕西省交通建设集团公司西商分公司网站银川市建设工程质量监督站网站
  • 动画制作器上海seo网络优化
  • 婚礼设计方案网站icp网站
  • 做网站赤峰手机网站建设需求文档
  • 福州企业网站推广左28cm
  • 做什么网站比较受欢迎大型网站建设公司沈阳
  • 网站建设工作室wp主题模板免费装wordpress
  • 网站建设需求文案案例wordpress连接微信订阅号
  • 网站设计方案和技巧昆明做网站找启搜网络
  • wordpress 主题搜索框seo引擎优化怎么做
  • 商洛建设网站采购系统
  • 个人建什么网站最赚钱cps推广是什么意思
  • 衡水企业网站建设报价品牌建设工作方案
  • 沈阳行业网站建设用wordpress建wiki
  • 做mla的网站淄博桓台学校网站建设哪家好
  • 瀑布流网站如何seo罗湖网站建设 信科网络
  • 河北网站优化公司济南网站建设599
  • 个人工作室网站模板wordpress仿谷歌主题
  • 网站利润分析在线教育网站建设方案
  • 一个月做网站用爬虫做网站
  • 网站策划包括哪些内容3小说网站开发
  • cms电影网站模板wordpress账号是什么
  • 企业如何做网站外包多少钱wordpress 木马 查
  • 北京 好的网站制作建个视频网站多少钱
  • 昆山玉山网站建设山东兴华建设集团有限公司网站拼音
  • 建筑人才网官方网站中国建筑科学院有限公司认证中心网站开发最新流程
  • 电子商务网站建设基本流程图免费网站用官微建站
  • 网站开发 嘉定海口装饰设计网站建设
  • 宁波网站运营优化系统系统和网站哪个简单一点