簡體   English   中英

MutableSequence作為isinstance()檢查中的列表傳遞

[英]MutableSequence to pass as a list in isinstance() check

我基於collections.MutableSequence構建了一個類似於列表的自定義類:

class MyList(collections.MutableSequence):
    etc... behave mostly like a list...

value = MyList([1,2,3])

在處理列表數據之前,第三方庫將運行以下檢查:

def check_correct_type(value):
    assert isinstance(value, list)

我不希望在將其類似列表的自定義對象傳遞給內置庫之前將其轉換為內置列表。

有沒有一種優雅的方法可以使MyList的實例看起來像是isinstance(MyList([1,2,3]), list)檢查中的list的實例?

不,如果沒有從list繼承,您的類實例將無法通過該測試。 必須繼承list才能通過該測試。

您可以嘗試從MutableSequencelist繼承; 然后,將在list查找未由您的類或MutableSequence實現的任何方法或屬性,因此您可能會得到不需要的其他方法,而這些方法或方法可能會出現異常:

class MyList(collections.MutableSequence, list):

您還可以monkeypatch check_correct_type()函數,只要它確實是像這樣的獨立函數:

def my_check_correct_type(value):
    assert isinstance(value, collections.MutableSequence)

third_party_library.check_correct_type = my_check_correct_type

暫無
暫無

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

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