本文主要是介绍Python3 新式类 和 经典类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python3 新式类 和 经典类
本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/71427902
以下代码以Python3.6.1为例
Less is more!
他们的区别主要体现在继承上
Python2.x 找父类初始化函数时, 经典类 按深度优先查找 新式类 按广度优先查找
Python3.x 找父类初始化函数时, 经典类 和 新式类 都是广度优先查找
#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/8'
# class_newold # 新式类 和 经典类(旧式类) 的演示
# 他们的区别主要体现在继承上
# Python2.x 找父类初始化函数时, 经典类 按深度优先查找 新式类 按广度优先查找
# Python3.x 找父类初始化函数时, 经典类 和 新式类 都是广度优先查找# === 经典类 ===
class Ao:def __init__(self):print("Ao")def show(self):print("s Ao")class Bo(Ao):def __init__(self):print("Bo")def show(self):Ao.show(self) # 经典类写法(执行指定的父类函数)print("s Bo")class Co(Ao):def __init__(self):print("Co")def show(self):Ao.show(self)print("s Co")class Do(Bo, Co):def show(self):Bo.show(self)Co.show(self)print("s Do")# === 新式类 ===
class An(object):def __init__(self):print("An")def show(self):print("s An")class Bn(An):def __init__(self):print("Bn")def show(self):super(Bn, self).show() # 新式类写法(按父类顺序自己执行)print("s Bn")class Cn(An):def __init__(self):print("Cn")def show(self):super(Cn, self).show()print("s Cn")class Dn(Bn, Cn):def show(self):super(Dn, self).show()print("s Dn")if __name__ == "__main__":# 创建对象# 初始化 __init__(self)时,只要找到一个就执行初始化,不会再继续执行第二个do = Do() # => Bodn = Dn() # => Bn# 初始化查找顺序为:# Python2.x: Bo -> Ao -> Co / Bn -> Cn -> An# Python3.x: Bo -> Co -> Ao / Bn -> Cn -> An# Python2.x 找父类初始化函数时, 经典类 按深度优先查找 新式类 按广度优先查找# Python3.x 找父类初始化函数时, 经典类 和 新式类 都是广度优先查找do.show() # s Ao => s Bo => s Ao => s Co => s Do (自行决定调用)dn.show() # s An => s Cn => s Bn => s Dn (深度优先调用)
这篇关于Python3 新式类 和 经典类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!