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调用java的Webservice示例
Mar 10 Python
Python lambda和Python def区别分析
Nov 30 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
python常见排序算法基础教程
Apr 13 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
python求最大值最小值方法总结
Jun 25 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
基于Python中random.sample()的替代方案
May 23 Python
在keras里实现自定义上采样层
Jun 28 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
PHP在Web开发领域的优势
2006/10/09 PHP
php判断变量类型常用方法
2012/04/24 PHP
php静态文件生成类实例分析
2015/01/03 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
匹配任意字符的正则表达式写法
2010/04/29 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
vue中监听返回键问题
2019/08/28 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
python绘制分布折线图的示例
2020/09/24 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
教师试用期自我鉴定
2014/02/12 职场文书
工厂搬迁方案
2014/05/11 职场文书
广播体操比赛口号
2014/06/10 职场文书
求职自我评价范文
2015/03/09 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
Python中Permission denied的解决方案
2021/04/02 Python