簡體   English   中英

如何為List工作?

[英]How does isinstance work for List?

我試圖理解Python的類型注釋是如何工作的(例如ListDict - not list or dict )。 具體來說,我對isinstance(list(), List)如何工作感興趣,這樣我就可以創建自己的自定義注釋。

我看到List被定義為:

class List(list, MutableSequence[T], extra=list):
    . . .

我熟悉metaclass = xxx但我找不到有關此extra = xxx任何文檔。 這是一個關鍵字還是一個參數,如果是這樣的話,它來自哪里,它會做我想要的事情? 是否與isinstance相關?

isinstance()issubclass()object.__instancecheck__()object.__subclasscheck__()中有掛鈎typing泛型也使用。

如果你想提供自己的泛型,你真的想學習typing模塊源代碼 ,特別是如何使用GenericMetaGeneric來定義其他通用類型,如List ; 大多數此類檢查都委托給abc.ABCMeta.__subclasshook__ 您可以使用這樣的鈎子定義自己的ABC,然后定義一個子類化它的Generic。

這里的GenericMeta元類也給出了extra關鍵字參數含義。 這樣的內部結構仍然很少被記錄,因為typing實現仍在不斷變化,該模塊仍然是臨時的 extra參數存儲為__extra__ ,用於自定義__subclasshook__實現 ; 對於extra=list它簡單地歸結為將isinstance(something, List)isinstance(something, list)

請注意,對運行時檢查的支持是故意限制的; 靜態類型檢查器實際上不會運行這些鈎子。 請參閱mypy跟蹤器中的結構子類型討論 ,以進一步討論開發人員如何考慮如何為復雜的自定義類提供更好的支持,這些自定義類可能會或可能不會實現足以被視為映射序列或類似的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM