抽象類:可以作為頂層基類,從高層次規範編程介面 1、在abc模塊中,最常見的抽象類有Iterable,我們可以用他判斷一個對象是不是可迭代對象 1 from collections.abc import Iterable 2 3 4 class Valley: 5 6 def __iter__(se ...
抽象類:可以作為頂層基類,從高層次規範編程介面
1、在abc模塊中,最常見的抽象類有Iterable,我們可以用他判斷一個對象是不是可迭代對象
1 from collections.abc import Iterable 2 3 4 class Valley: 5 6 def __iter__(self): 7 ... 8 9 10 if __name__ == "__main__": 11 print(isinstance(Valley(), Iterable))
output:
True
2、抽象類的子類化機制
2.1、重寫__subclasshook__類方法,定製抽象類的子類判斷邏輯,這種子類化形式只關心結構,不關心真實的繼承關係,稱之為:結構化子類
1 import abc 2 3 4 class A(abc.ABC): 5 @classmethod 6 def __subclasshook__(cls, c): 7 if any("verify" in b.__dict__ for b in c.__mro__): 8 return True 9 return False 10 11 12 class Valley: 13 def __init__(self): 14 ... 15 16 def verify(self): 17 print(1) 18 19 20 if __name__ == "__main__": 21 print(isinstance(Valley(), A))
output:
True
2.2、繼承抽象基類元類register方法直接註冊
1 import abc 2 3 4 class A(abc.ABC): 5 ... 6 7 8 class Valley: 9 def __init__(self): 10 ... 11 12 def verify(self): 13 print(1) 14 15 16 A.register(Valley) 17 if __name__ == "__main__": 18 print(isinstance(Valley(), A))
目前未找到合適的應用場景,希望知曉的可以在下麵寫個小demo,我參考參考
只有永不遏止的奮鬥,才能使青春之花,即便是凋謝,也是壯麗地凋謝