emmm…在學習抽象基類時,我們接觸的就比python基礎更加的底層,于是很多莫名其妙的子產品接踵而來。比如首先看到了
from collections import abc
,後面又看到了
import abc
。就很好奇,兩個
abc
子產品是同一個子產品嗎?或者它們之間又有什麼關系呢?
colletions
這個子產品為開發者提供了一系列靈活、實用的類和方法。用起來也非常友善,具體如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR1ENrpWTx0EROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5QTM0IDMxQTM3ATMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
從上圖我們發現
_collections_abc
子產品,實際上這是python3之後引入的子子產品。但是這跟
abc
子產品有什麼關系呢?還聽我通過源碼給你娓娓道來。
首先
colleticons
是我們的内置子產品,是以直接來到python下的Lib檔案夾下找
然後點選到
__init__.py
下檢視
我們發現,在
__init__.py
中,我們通過
__all__
指定允許外部通路的方法以及類。然後再往下看,在
colletions
子產品裡導入了
_collections_abc
的所有方法,并且将
__all__
又拼接上了
_collections_abc.__all__
。也就是說,我們可以在
collections
裡面通路
abc
,即
collections.abc
。
仍然不能高興太早,因為現在我們并不确定此
abc
是不是彼
abc
。是以我們打開
點選
_collections_abc
進去,源碼如下:
通過源碼,其實我們看出來
_collections_abc
是從
abc
子產品中導入了
ABCMeta
抽象基類等等。
與此同時,有的朋友還很好奇
Lib
下的
abc
子產品藏着哪些奧秘,我們也一樣來看到其源碼
奧,搞定。
但是來一個小小的總結啦~
-
中的collections.abc
子產品實際上是從abc
導入抽象基類(Lib/abc
,ABCMeta
),進而封裝了一系列有趣的、有自己功能的抽象基類,比如abstractmethod
等Sized
-
本質就是一個單獨子產品,是用來定義抽象基類的,也可以說是抽象基類的接口。Lib/abc