经典类和新式类的区别,c3算法

一  经典类和新式类的区别

1, 只有py2中有经典类, 2.2版本以后新增了新式类.  怎样区分,新式类后面必须继承object

py3 中只有新式类.写不写继承,都是默认继承object

2,  查找顺序不一样,

经典类-深度优先,就是一条道走到黑

新式类 -广度优先(这样说不太精准),通过c3算法,找出顺序

二,c3 算法

 

class A(object):
    pass

class B(A):
    pass

class C(B):
    pass

class D(object):
    pass

class E(D,C):
    pass

class F(object):
    pass

class G(F):
    pass

class H(C,G):
    pass

class Foo(E,H):
    pass

# print(E.__mro__)  #查找E类的查找顺序
# print(H.__mro__)
"""
L(Foo + L(E)  + L(H) )

L(E) = E,D,C,B,A,object
L(H) = H,C,B,A,G,F,object

Foo = (object) + (G,F,object)
Foo,E,D,H,C,B,A,G,F,object
"""
print(Foo.__mro__)#(<class ‘__main__.Foo‘>, <class ‘__main__.E‘>,
#  <class ‘__main__.D‘>, <class ‘__main__.H‘>, <class ‘__main__.C‘>,
#  <class ‘__main__.B‘>, <class ‘__main__.A‘>, <class ‘__main__.G‘>,
#  <class ‘__main__.F‘>, <class ‘object‘>)

查找口头解释
   获取第一个表头 和 其他表位进行比较   不存在则拿走。   如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较。
 

原文地址:https://www.cnblogs.com/lxx7/p/9579304.html

时间: 2024-11-06 16:49:01

经典类和新式类的区别,c3算法的相关文章

重写父类的方法及经典类和新式类的区别

1.父类重写的实例展示 (继承才有父类) # coding=utf-8 class Zll(): # def smile(self): #      print('哈哈哈') #      return 'aa' pass class Dcg(): def smile(self): print('啊啊啊啊啊') class Lw(): def smile(self): print('嘿嘿嘿') class Xz(Zll,Dcg,Lw):   #继承多个父类依次找父类是否有该方法,有就调用. de

python基础学习日志day6-类的经典类vs新式类

经典类VS新式类区别 1)写法新式类class Person(object):#new style 经典类class Persion: #classical style 2)调用父类 新式写法用super 经典类直接写父类类名 3)多继承时继承顺序python3使用的是广度查询,所以两个都一样. 经典类python2是深度查询.所以经典类python2多继承是有BUG class D(B,C) D-->B-->A--C # -*- coding:utf-8 -*- __author__ = '

二十五.面向对象(经典类和新式类)

经典类和新式类 class A(object): pass class B(A): pass class C(B): pass class D(object): pass class E(D,C): pass class F(object): pass class G(F): pass class H(C,G): pass class Foo(E,H): pass # a1=Foo() print(Foo.__mro__) # (<class '__main__.Foo'>, <clas

【python】-- 类的多继承、经典类、新式类

继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承. class SchoolMember(object): #SchoolMember类 '''学校成员基类''' def tell(self): print("the schoolmeber is tell...") class School(ob

Python自学之乐-python 2、python 3中经典类、新式类的深度和广度优先小结

#Author:clarkclass Original(object):#在python 3 中写上object的新式类和不写的经典类遵循的都是广度优先原则 def __init__(self): print("in Original")class Second(Original): pass # def __init__(self): # print("in the second")class Third(Original): def __init__(self)

经典类与新式类的继承顺序

经典类与新式类的继承顺序--两种不同的继承策略. 构造函数(初始化)__init__(self): 的继承策略,就是找哪个__init__(self)的问题 当实例本身有__init__(self) 的时候,会先执行自己的)__init__(self) 函数. 当实例本身没有__init__(self)的时候,它会去找父类中的)__init__(self)函数,此时有2种 继承策略,一种是深度优先,一种是广度优先. 我们看上面的图,先放两句概念上来吓唬吓唬你: 当类是经典类时,多继承情况下,会按

python------面向对象介绍之经典类与新式类的继承顺序

一. 经典类与新式类的继承顺序 1 class A: 2 def __init__(self): 3 print("A") 4 5 class B(A): 6 def __init__(self): 7 print("B") 8 9 class C(A): 10 def __init__(self): 11 print("C") 12 13 class D(B,C): 14 pass 15 16 obj = D() 注:python2.x 经典类

继承1.继承,2.属性查找顺序3.子类访问父类内容4.补充,经典类与新式类 --------- # 21

继承: 1.继承 1.1继承 1 '''''' 2 """ 3 1.什么是继承? 4 继承是描述两个对象之间,什么是什么的关系 5 6 案例:麦兜,佩奇,猪刚鬓 -- 都是猪 7 8 在程序中,继承描述的是类和类之间的关系 9 10 例如:a 继承 b,a就能直接使用b已经存在的方法或属性 11 此时,a称之为子类,b被称之为父类,也称为基类 12 13 2.为什么要使用继承? 14 继承的一方制剂使用另一方已经有的东西 15 其目的是:提高重用性(重用已有的代码) 16 1

Python经典类和新式类的区别

<span style="font-size:18px;">#从Python的内置类中派生的都是python的新式类 #新式类会广度搜索,也就是一层层的向上搜索 class A(object): attr=1 class B(A): pass class C(A): attr=3 class D(B,C): pass #经典类会深度搜索,遇到一个超类节点向上搜索 class ClassicA: attr=1 class ClassicB(ClassicA): pass cl