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

标签:python,类,继承
0
投稿

猜你喜欢

  • 解决Python传递中文参数的问题

    2021-04-10 09:00:07
  • 解决MySQL 5数据库连接超时问题

    2009-03-25 15:24:00
  • 09年QQ登录Banner之转变

    2009-02-16 12:53:00
  • Python游戏开发之Pygame使用的最全教程分享

    2021-01-11 05:45:55
  • ASP使用xmlhttp调用WEBSERVICE文档

    2008-05-30 13:56:00
  • 网页设计的十大戒律

    2008-08-10 17:55:00
  • 一个将半角"转换为中文"的asp函数

    2007-09-19 11:47:00
  • 关于《回访确认》的几个问题

    2009-08-24 12:43:00
  • Python读取xlsx数据生成图标代码实例

    2022-01-11 11:35:56
  • 特殊字符、常规符号及其代码对照表

    2010-08-24 18:13:00
  • 10条改进你的CSS代码的方法

    2010-03-20 22:07:00
  • 使用Django和Postgres进行全文搜索的实例代码

    2022-07-06 10:52:15
  • js常用排序实现代码

    2023-08-30 08:50:24
  • MySQL数据库的双向加密方式

    2009-11-18 11:07:00
  • Django开发中的日志输出的方法

    2023-02-24 07:37:17
  • window.location.hash属性介绍

    2008-03-21 12:39:00
  • python利用pytesseract 实现本地识别图片文字

    2021-03-08 19:20:34
  • wxPython之解决闪烁的问题

    2022-05-12 13:21:30
  • 详解MySQL数据库中字符串的正确使用

    2010-06-20 15:01:00
  • JSP 获取spring容器中bean的两种方法总结

    2023-06-15 07:27:46
  • asp之家 网络编程 m.aspxhome.com