1. 程式人生 > >Python第十七天 抽象類

Python第十七天 抽象類

算法 methods super object 順序 執行 廣度優先 abc str

 1 from abc import ABCMeta, abstractmethod
 2 
 3 class A(metaclass=ABCMeta):  稱 A 為抽象類
 4     @abstractmethod
 5     def test(self):pass      test 為抽象方法, 必須由繼承的子類實現具體功能
 6 
 7 
 8 class B(A):
 9     pass
10 
11 B()   只要創建類  B 的 對象, 就會報錯

TypeError: Can‘t instantiate abstract class B with abstract methods test

python3,以後,新式類, 多繼承,方法的查找順序, 廣度優先算法

 1 class A:
 2     def test(self):
 3         print(in A)
 4 
 5 class B(A):
 6     def test(self):
 7         print(in B)
 8         super().test()
 9 
10 class C(A):
11     def test(self):
12         print(in C)
13         super().test()
14 
15 class D(B):
16 def test(self): 17 print(in D) 18 super().test() 19 20 class E(C): 21 def test(self): 22 print(in E) 23 super().test() 24 25 class F(D, E): 26 def test(self): 27 print(in F) 28 super().test() 29 30 31 F().test() 32 33 print(F.mro())

執行結果

in F
in D
in B
in E
in C
in A
[<class __main__.F>, <class __main__.D>, <class __main__.B>, <class __main__.E>, <class __main__.C>, <class __main__.A>, <class object>]

Python第十七天 抽象類