python类的继承实例详解


Posted in Python onMarch 30, 2017

python 类的继承

对于许多文章讲解python类的继承,大多数都是说一些什么oop,多态等概念,我认为这样可能对有一定基础的开发者帮助不是那么大,不如直接用在各种情况下所写的代码,来展示对于某一种代码情况,代码运行会有什么效果。这样可能对开发者的帮助更大。不说废话,直接上代码。

这里不区分经典类和新式类,下面分析的对新式类和经典类都适用

对于类中的__init__函数,只是一个初始化是调用的一个函数(ps:初始化和创建实例并不是一个过程,实例的创建是通过一个create函数来完成的),如果在子类中没有显示的声明__init__函数,则子类就会调用父类的__init__函数,但是不会再调用父类的父类中的__init__函数,如果显示的声明了__init__ 函数,则在子类的初始化的时候就不会调用父类的初始化函数,只会调用子类中声明的__init__函数, 同时在子类实例中也不会有父类__init__函数中声明的属性,

例子:

class animal():
 name="hh"
 sex="man"
 def __init__(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def __init__(self):
  pass
if __name__=="__main__":
 dg=dog()
 print dg.__dict__

此时运行的结果为

{}

当把dog类修改为如下时(ps:此时没有显示的声明__init__方法):

class dog(animal):
 def run(self):
  print "dog is running..."

此时由于直接调用的父类animal的__init__方法,结果如下:

{'weight': 50, 'height': 10}

如果此时有一个类继承dog类,此时会出现什么情况呢?(python解释器先在子类中寻找__init__方法,如果没有找到,再从父类中找,直到找到为止,并运行,并且不再运行父类的父类的__init__方法,此时没有运行的__init__方法中的创建的属性是没有的,例如上面的例子,第一次运行时得到的例子中并没有weight和height属性)

class animal():
 name="hh"
 sex=""
 def __init__(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def __init__(self):
  pass
 def run(self):
  print "dog is running..."
class jinmao(dog):
 # def __init__(self):
 #  self.ji="jinmao"
 pass
if __name__=="__main__":
 dg=jinmao()
 print dg.__dict__

此时的结果一样是

{}

在类的多继承中会产生什么状况呢?(在多继承中会运行类的继承参数中的第一个参数声明的父类中的__init__函数,如果父类中没有__init__函数,继续寻找父类的父类中有没有,以此类推。。。如果找到了头还是没有,则换为第二个参数声明的父类,过程如第一个参数,知道找到__init__函数为止,如果都没有找到,则不初始化),代码可以根据前面例子自己测试。

对于在子类中调用父类中的方法的super的使用与特性。

总结:如果想了解python虚拟机具体是怎么创建类的(具体到当加载一个.pyc文件时,是怎么通过c语言的代码逻辑来把类对象放到一块内存中的,我也在了解这方面的内容,希望咱们一块探索)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
django之自定义软删除Model的方法
Aug 14 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
Python如何定义有默认参数的函数
Aug 10 Python
opencv python 对指针仪表读数识别的两种方式
Jan 14 Python
python如何做代码性能分析
Apr 26 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 #Python
python下读取公私钥做加解密实例详解
Mar 29 #Python
django开发之settings.py中变量的全局引用详解
Mar 29 #Python
深入理解Python3中的http.client模块
Mar 29 #Python
Python 中迭代器与生成器实例详解
Mar 29 #Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 #Python
windows系统下Python环境搭建教程
Mar 28 #Python
You might like
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
56.com视频采集接口程序(PHP)
2007/09/22 PHP
php 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
Python计算三维矢量幅度的方法
2015/06/15 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python数据集切分实例
2018/12/08 Python
Python对列表的操作知识点详解
2019/08/20 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
小孩百日宴答谢词
2014/01/15 职场文书
2014年共青团工作总结
2014/12/10 职场文书
美丽的大脚观后感
2015/06/03 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js