前言:继承是Python编程中重要环节,但是需要注意的点比较多,下面我们就一起来康康吧。

一、继承是什么?都能继承什么?

继承:子类继承父类,继承后就拥有父类的可用的所有属性和方法

可以继承:类属性,类方式、 _属性/_方法(浅私有)

不可以继承: __属性/__方法(深私有):不能被继承

class A_test: #父类__age = 18_sex = "男"def __init__(self):passdef name(self):print("我是父类")class B_test(A_test):  #继承父类(A_test)def jicheng(self):print("打印父类的_sex:",A_test._sex) #调用父类(A_test)中的,浅私有属性:_sex# print("打印父类的__age:",A_test.__age)  #这里调用就会报错,因为__age上父类是深浅私有属性cl = B_test() #实例化
cl.jicheng()  #调用子类的jicheng方法响应:打印父类的_sex: 男

二、可以多继承吗?

答:python多继承 -- 继承多个父类 --

​​​​​​​继承的语法:
class 子类(父类1,父类2.....):PASS
子类继承父类,拥有父类所有属性和方法,除了私有化除外

三、可以继承构造方法(__init__)方法吗??

答:可以,但是分情况

a)情况1:子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__

解释:父类有__init__方法,子类没有时,自动调用父类的__init__方法

class A_test: #父类__age = 18_sex = "男"def __init__(self):print("我是父类的构造方法")def name(self):print("我是父类")class B_test(A_test):  #继承父类(A_test)#这里子类没写__init__方法,只能调用父类的方法def jicheng(self):passcl = B_test() #实例化
cl.jicheng()  #调用子类的jicheng方法响应:我是父类的构造方法
打印父类的_sex: 男
我是父类的构造方法
#这里看到有两个“我是父类的构造方法”打印,是因为第一次继承父类,父类自己运行了一次,子类没有构建方法,又调用了父类的构建方法,又打印了一次

b)情况2:子类如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__,语法格式如下:

解释:父类和子类都有__init__方法时,优先执行子类的__init__方法

class A_test: #父类__age = 18_sex = "男"def __init__(self):print("我是父类的构造方法")def name(self):print("我是父类")class B_test(A_test):  #继承父类(A_test)def __init__(self):print("我子类自己的__init__方法")def jicheng(self):passcl = B_test() #实例化
cl.jicheng()  #调用子类的jicheng方法响应:我子类自己的__init__方法

c)情况3:父类子类都有__init__方法 时,子类想调用父类的__init__的方法?

解释:——super(子类,self).__init__(参数1,参数2,....) =>super().__init__() 即可   

class A_test: #父类__age = 18_sex = "男"def __init__(self):print("我是父类的构造方法,我在这里")def name(self):print("我是父类")class B_test(A_test):  #继承父类(A_test)def __init__(self):print("我子类自己的__init__方法")def jicheng(self):super().__init__()  #继承父类__init__方法,但是默认执行顺序还是 子类__init__ > 父类 __init__cl = B_test() #实例化
cl.jicheng()  #调用子类的jicheng方法响应:
我子类自己的__init__方法
我是父类的构造方法,我在这里

四、可以重写父类方法吗?

答:情况1——可以,然后全部重写父类方法

class A_test: #父类__age = 18_sex = "男"def __init__(self):print("我是父类的构造方法,我在这里")def name(self):print("我是父类的姓名")def age(self):print("我是父类的年龄")class B_test(A_test):  #继承父类(A_test)def __init__(self):print("我子类自己的__init__方法")def name(self): #与父类方法同名,直接重写父类方法print("我是重写你的子类方法")def verify(self):self.name()  cl = B_test() #实例化
cl.verify()  #调用子类的jicheng方法响应:
我子类自己的__init__方法
我是重写你的子类方法

答:情况2——可以,在父类方法上增加功能

class A_test: #父类__age = 18_sex = "男"def __init__(self):print("我是父类的构造方法,我在这里")def name(self):print("我是父类的姓名")def age(self):print("我是父类的年龄")class B_test(A_test):  #继承父类(A_test)def __init__(self):print("我子类自己的__init__方法")def name(self): #与父类方法同名,增加父类的方法功能super().name()print("我是重写你的子类name方法")def verify(self):self.name()cl = B_test() #实例化
cl.name()  #调用子类的jicheng方法响应:
我子类自己的__init__方法
我是父类的姓名
我是重写你的子类name方法

五、完整例子

class Father:  #新建一个父类def __init__(self,name,age):self.name = nameself.age = agedef enr_money(self,wokr):print("{}靠{}工作赚钱".format(self.name,wokr))def hooby(self,favirate):print("{}的爱好:{}".format(self.name,favirate))class Son(Father): ##WWclass 子类(父类1,父类2.....)继承def study(self,content):###你想在父类的功能或者属性以外,添加属于你自己特色的方法。print("我通过学习{}来提升自己".format(content))def enr_money(self,wokr1):#在与父类同名的方法的内,想调用父类的同名方法super().enr_money(wokr1)##super().超类来使用父类的方法print("{}通过{}投资理财再赚了 2000块!!!!".format(self.name,wokr1))###在父类的基础上,额外增加了,父类原基础上的不会变# def enr_money(self, work1,work2):  # 在与父类同名方法,但是我要完全重写。不用父类的代码。#     print("{} 通过{} 和{}来赚钱".format(self.name,work1,work2))mama = Father("老汪",41) #继承后依然拥有父类所有属性和方法,除了私有化除外,所以这里都是需要填参数的
mama.enr_money("工地")
mama.hooby("看电影")wang = Son("小汪",22)
wang.study("柠檬班")
wang.enr_money("基金")响应:老汪靠工地工作赚钱
老汪的爱好:看电影
我通过学习柠檬班来提升自己
小汪靠基金工作赚钱
小汪通过基金投资理财再赚了 2000块!!!!

认识Python继承:super()相关推荐

  1. python继承super函数_Python中的super函数如何实现继承?

    本篇文章给大家带来的内容是关于Python 中的super函数如何实现继承?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Py 2.x 和 Py 3.x 中有一个很大的区别就是类,无 ...

  2. python继承中的参数_python 继承中的super

    python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...

  3. python 继承和多态

    python 继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Ba ...

  4. python之父去面试-Python面试题之Python的Super方法

    当我第一次见到这个super()的时候,我想说,这是啥啊?为什么Python的super看起来这么奇怪呢? super直接指向父类的实例不就得了么?为什么非得搞两个参数? 而且第一个参数还是自己的类名 ...

  5. python编程语言继承_python应用:学习笔记(Python继承)

    学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...

  6. Python的Super方法

    我们最常见的,可以说几乎唯一能见到的使用super的形式是: class SubClass(BaseClass):def method(self):super(SubClass, self).meth ...

  7. python 继承的规则

    本文讲述python继承规则. 先来看一些概念: 面向对象的概念 简单地说 面向对象编程(Object Oriented Programming)简称OOP 就是使我们分析.设计 和实现一个系统的方法 ...

  8. [转载] Python 继承

    参考链接: Python继承 # 继承 # 定义一个类 Animal(动物) #   这个类中需要两个方法:run() sleep() class Animal: def run(self): pri ...

  9. python3 super_Python super()– Python 3 super()

    python3 super Python super() function allows us to refer to the parent class explicitly. It's useful ...

  10. python super()方法的作用_详解python的super()的作用和原理

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.uz0免费资源网 今天我们介绍的主角是s ...

最新文章

  1. 第十五届全国大学生智能汽车竞赛中小学生赛题组获奖队伍信息
  2. 【探索PowerShell 】【三】PowerShell下使用Aliases
  3. jvm7 jvm8_我们真的仍然需要32位JVM吗?
  4. 帮助学生改善学习方法_学生应该如何花费时间改善自己的幸福
  5. cygwin/gcc与MinGW
  6. 【bzoj2806】 Ctsc2012—Cheat
  7. 力扣116. 填充每个节点的下一个右侧节点指针(C++,附思路)
  8. JVM系列五:垃圾回收器
  9. shiro服务器取不到用户信息,SpringMvc+Shiro有时候shiro取不到用户名
  10. Spring中的bean是否是线程安全的
  11. java:记一次因时区导致出参和入参时差8小时前因后果
  12. 4.3 Matplotlib 图中图
  13. 世界药林:首款PRCP抑制剂奥拉帕利已经批准4种适应症
  14. APT仓库目录和repository目录结构
  15. 通过CC逻辑控制芯片(CC Logic)HUSB320,简单实现接口升级
  16. 苹果cms(mac cms)安装和避雷
  17. 网络布线之有线传输+UTP线缆连接
  18. 两款非常好的Redis 可视化管理工具:Another Redis Desktop Manager、QuickRedis
  19. 流媒体技术在宽带网络的应用与发展
  20. 汇编代码 按ESC改变屏幕显示的颜色

热门文章

  1. 9款好用的SSH客户端软件推荐
  2. 亚马逊云科技物联网产业创新峰会与你相聚蓉城
  3. 第三章 关系数据模型
  4. 以阿里IoT开发物联网和应用平台
  5. 未知usb设备(设备描述请求失败)_HomePod mini?电源线同样不可拆卸:但或能用USB-C移动电源供电...
  6. mysql数据库统计人数_统计人数 数据库
  7. 基因组+转录组助力油菜种子油含量自然变异的遗传研究
  8. Spark jars依赖问题
  9. ctfshow-萌新(持续更新)
  10. 软件工程复习题-快来划重点