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读写文件操作示例程序
Dec 02 Python
Python随机生成数模块random使用实例
Apr 13 Python
Python过滤列表用法实例分析
Apr 29 Python
Python只用40行代码编写的计算器实例
May 10 Python
Python3实现的简单验证码识别功能示例
May 02 Python
简单了解python元组tuple相关原理
Dec 02 Python
Django异步任务线程池实现原理
Dec 17 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
Python 如何测试文件是否存在
Jul 31 Python
Django如何实现防止XSS攻击
Oct 13 Python
python 实现体质指数BMI计算
May 26 Python
用Python进行栅格数据的分区统计和批量提取
May 27 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 启动时报错的简单解决方法
2014/01/27 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
使javascript也能包含文件
2006/10/26 Javascript
js技巧--转义符"\"的妙用
2007/01/09 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
深入解析Python中的上下文管理器
2016/06/28 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
python 追踪except信息方式
2020/04/25 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
中国医药集团国药在线:国药网
2017/02/06 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
个人近期表现材料
2014/02/11 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
博士给导师的自荐信
2015/03/06 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技