python类的继承实例详解
作者:lqh 发布时间:2021-04-10 07:22:33
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语言的代码逻辑来把类对象放到一块内存中的,我也在了解这方面的内容,希望咱们一块探索)
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:https://yq.aliyun.com/articles/72862?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&2017330&utm_content=m_15387
猜你喜欢
- PHP PDO预定义常量以下常量由本扩展模块定义,因此只有在本扩展的模块被编译到PHP中,或者在运行时被动态加载后才有效。注意:PDO使用类
- 先从String的扩展开始吧,后面有一部分的扩展要依赖这里扩展的方法。为了更加清晰和详细,我会一个方法一个方法地贴出来,你完全可以把所有的方
- 关于数据库的逻辑设计,是一个很广泛的问题。本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以
- 简介看到了一个能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息的模块–psutil模块。这次利用psutil
- 前言:本文介绍如何构建简单线性回归模型及计算其准确率,最后介绍如何持久化模型。线性回归模型线性回归表示发现函数使用线性组合表示输入变量。简单
- 如何在本地机器上创建缓存?用法到是很简单,只需先创建Stream对象的实例,然后开始写入数据即可: Dim str&n
- 今日一同时问我,new Date(Date(str))这段代码什么意思?我一看就晕了,一个new Date 一个Date这是什么意思?这函数
- 本文实例为大家分享了python傅里叶变换FFT绘制频谱图的具体代码,供大家参考,具体内容如下频谱图的横轴表示的是 频率, 纵轴表
- 不知道怎么忽然想看这个,呵呵 小我的python的反shell的代码 #!/usr/bin/python # Python&nbs
- 有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页
- 本文实例讲述了python简单猜数游戏。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/env pythonimport ra
- “博客就像一本书”这话其实几个月前深圳FB时就有扯到,这也不是什么新概念,也许本身就应该是这样。打个比方,当你拿到一本未看过的书时,理论上你
- 首先来看一下代码:chars = "abcd"tmp = []for char in chars: tmp.append
- 和网友们讨论了数组取交集的方法,下面是两个实现arr1=["1","5","6"
- 学在前面从本篇博客起,我们将实际完成几个小案例,第一个就是银行卡号识别,预计本案例将写 5 篇左右的博客才可以完成,一起加油吧。本文的目标是
- pytorch_pretrained_bert将tensorflow模型转化为pytorch模型BERT仓库里的模型是TensorFlow版
- 本文实例讲述了Python列表计数及插入的用法。分享给大家供大家参考。具体如下:word=['a','b',
- text-overflow这个属性真让Firefox折腾,虽然之前有写过Firefox通过XUL实现text-overflow:ellips
- 一、1、图形显示图素法像素法图素法---矢量图:以图形对象为基本元素组成的图形,如矩形、 圆形像素法---标量图:以像素点为基本单位形成图形
- 目录1、typing介绍2、typing的作用3、常用类型3.1 代码示例4、typing模块的其他用法4.1 类型别名4.2 NewTyp