Python3 新式类 和 经典类

来源:互联网 发布:ymnets源码下载 编辑:程序博客网 时间:2024/05/01 07:18

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()  # => Bo    dn = 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 (深度优先调用)
0 0