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开发微信支付的注意事项
Aug 19 Python
python中正则的使用指南
Dec 04 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python实现多线程网页下载器
Apr 15 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python tornado修改log输出方式
Nov 18 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
May 22 Python
python实现mean-shift聚类算法
Jun 10 Python
python爬虫筛选工作实例讲解
Nov 23 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
MySQL授权问题总结
2007/05/06 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
2013/02/25 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
深入研究React中setState源码
2017/11/17 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python多任务之协程的使用详解
2019/08/26 Python
Python箱型图处理离群点的例子
2019/12/09 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
Python的collections模块真的很好用
2021/03/01 Python
应届生财务管理求职信
2013/11/06 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
个人授权委托书
2014/09/15 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
Tomcat弱口令复现及利用
2022/05/06 Servers