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  连接字符串(join %)
Sep 06 Python
Python微信库:itchat的用法详解
Aug 14 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
numpy下的flatten()函数用法详解
May 27 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
用Python解数独的方法示例
Oct 24 Python
使用python批量转换文件编码为UTF-8的实现
Apr 03 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
详解基于Scrapy的IP代理池搭建
Sep 29 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
PHP学习之PHP运算符
2006/10/09 PHP
数字转英文
2006/12/06 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php生成zip文件类实例
2015/04/07 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2012/01/03 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
javascript 闭包详解
2015/07/02 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
17个Python小技巧分享
2015/01/23 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
使用Python生成XML的方法实例
2017/03/21 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
会员活动策划方案
2014/08/19 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
小学语文国培研修日志
2015/11/13 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis