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的Flask框架中使用日期和时间的教程
Apr 21 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
Python使用asyncio包处理并发详解
Sep 09 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
关于python写入文件自动换行的问题
Jun 23 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python对XML文件的操作实现代码
Mar 27 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
python 如何读、写、解析CSV文件
Mar 03 Python
Python 高级库15 个让新手爱不释手(推荐)
May 15 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调用三种数据库的方法(2)
2006/10/09 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
Python程序中设置HTTP代理
2016/11/06 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
纠风工作实施方案
2014/03/15 职场文书
触电现场处置方案
2014/05/14 职场文书
物业管理专业求职信
2014/06/11 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
《山中访友》教学反思
2016/02/24 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
Win10系统下配置Java环境变量
2021/06/13 Java/Android