python3中类的继承以及self和super的区别详解


Posted in Python onJune 26, 2019

python中类的继承:

子类继承父类,及子类拥有了父类的 属性 和 方法。

python中类的初始化都是__init__()。所以父类和子类的初始化方式都是__init__(),但是如果子类初始化时没有这个函数,那么它便调用父类的__init__();如果实现了这个函数,就会覆盖父类的初始化函数。如果继承父类的__init__(),就需要在子类中显示调用这个函数。实现如下:

class Animal(object):
 def __init__(self):
  self.name = "我是父类"
 
class Panda(Animal):
 def __init__(self):
  super().__init__() #使用super的方式来显示调用父类的__init__()函数
 
if __name__=="__main__":
 panda = Panda() #实例化Panda
 print(panda.name)
我是父类  #输出可以看出使用了父类的初始化函数并有了name属性

子类也可以在初始化函数中定义自己的属性:

class Animal(object):
 def __init__(self):
  self.name = "我是父类"
 
class Panda(Animal):
 def __init__(self):
  super().__init__()
  self.myname = "panda"
 
if __name__=="__main__":
 panda = Panda()
 print(panda.myname)
panda  #子类自己的属性

self和super的区别:

★self是首先调用自身的方法如果自身没有再去父类中找;super是直接从父类中找方法

★self是类,super是预编译指令

★self class 和super calss的输出是一样的

class Animal(object):
 def __init__(self):
  self.name = "我是父类"
 
 def A(self):     #父类中的A方法
  print("父类的A方法")
 
class Panda(Animal):
 def __init__(self):
  super().__init__()
  self.myname = "panda"
 
 def A(self):     #子类中的A方法
  print("子类的A方法")
 
 def B(self):
  self.A()  #self调用A
  super().A()  #super调用A
 
 
if __name__=="__main__":
 panda = Panda()
 panda.B()   #通过B函数来调用A方法,查看self和super的区别
子类的A方法   #我们说过self是先从自身找方法,没有再去父类找
父类的A方法   #而super则是直接从父类中找

如果子类中没有A方法那么会输出:

父类的A方法  #子类没有,self从父类中找
父类的A方法

父类没有则会报错

以上则是python中继承的基础讲解,以及self和super的区别。类其实还是又很多复杂的地方,在使用过程会慢慢学习到,这里只是一个入门级的说明。

这篇python3中类的继承以及self和super的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
对python中assert、isinstance的用法详解
Nov 27 Python
Python数据持久化存储实现方法分析
Dec 21 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
Python post请求实现代码实例
Feb 28 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
Mar 01 Python
详解python如何引用包package
Jun 07 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
带你学习Python如何实现回归树模型
Jul 16 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
Python绘制数码晶体管日期
Feb 19 Python
对Python中class和instance以及self的用法详解
Jun 26 #Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 #Python
对python 中class与变量的使用方法详解
Jun 26 #Python
python 机器学习之支持向量机非线性回归SVR模型
Jun 26 #Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 #Python
Python Numpy 实现交换两行和两列的方法
Jun 26 #Python
python 字典操作提取key,value的方法
Jun 26 #Python
You might like
php中截取字符串支持utf-8
2007/01/18 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
PHP 实现缩略图
2021/03/09 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python基础中所出现的异常报错总结
2016/11/19 Python
python读取二进制mnist实例详解
2017/05/31 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
教育项目合作协议书格式
2014/10/17 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
介绍信范文大全
2015/05/07 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers