天天看點

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