.經典類
.新式類
.深度優先
.廣度優先
首先經典類是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