Python---面向对象编程-2

.经典类

.新式类

.深度优先

.广度优先

首先经典类是Python 2.x中的一个名词,Python 2.x默认是经典类,只有显示继承了object才是新式类;在Python3.x中默认都是新式类。

经典类详解

  object是“所有类之母”。而在Python2.x当中要写上object才是新式类,所以很显然什么都不写就是经典类了,事实上就是如此,如果你没有指定一个父类,或者如果所子类化的基本类没有父类,你这样就创建了一个经典类。我们来看一个例子:

1 #!/usr/bin/python2
2 #-*- coding:utf-8 -*-
3 
4 class MyObjectType:
5     'define MyObjectType classic class'
6     class_suite
View Code

新式类详解

  由上可知,在类继承object这个基类的就是新式类。但在Python3.x中默认都是新式类,经典类被移除,不必显示继承object。

 1 #!/usr/bin/python3
 2 #-*- coding:utf-8 -*-
 3 
 4 class MyObjectType(object):
 5     'define MyObjectType new class'
 6     class_suite
 7     
 8 class MyNewObjectType():
 9     'define MyObjectType new class'
10     class_suite
View Code

 说到经典类和新式类,就一定要提一提深度优先和广度优先这两个名词。

新式类的MRO算法采用C3算法广度优先搜索,而经典类的MRO算法则是采用深度优先搜索。

深度优先

 1 #!/usr/bin/python2
 2 #-*- coding:utf-8 -*-
 3 
 4 class A:
 5     pass
 6 class B:
 7     pass
 8 class C(B):
 9     pass
10 class D(C,A):
11     pass
View Code

执行顺序为:D->C->B,->A

广度优先

 1 #!/usr/bin/python3
 2 #-*- coding:utf-8 -*-
 3 
 4 class A(object):
 5     pass
 6 class B(object):
 7     pass
 8 class C(object):
 9     pass
10 class D(A,B,C):
11     pass
View Code

执行顺序为:D->A->B->C->Object

原文地址:https://www.cnblogs.com/GaJack/p/8746665.html