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 相关文章推荐
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
Pycharm安装第三方库失败解决方案
Nov 17 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 addslashes和mysql_real_escape_string
2010/01/24 PHP
PHP下对字符串的递增运算代码
2010/08/21 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
JS图片根据鼠标滚动延时加载的实例代码
2013/07/13 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
2019/01/27 jQuery
js实现图片局部放大效果详解
2019/03/18 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
英语专业学生个人求职信
2014/01/28 职场文书
劳动之星获奖感言
2014/02/01 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
开除通知书范本
2015/04/25 职场文书
惊天动地观后感
2015/06/10 职场文书
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers