0

我基于以下内容构建了一个类似列表的自定义类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看起来好像它是支票list中的一个实例isinstance(MyList([1,2,3]), list)

4

1 回答 1

2

不,您的类的实例如果不继承自list. 您必须子类化list才能通过该测试。

MutableSequence您可以尝试从两者继承list; 任何未由您的类或未实现的方法或属性MutableSequence都将被查找list,因此您可能会得到额外的方法,这些方法您不想要这种方式,并且可能会出现意外行为:

class MyList(collections.MutableSequence, list):

你也可以对该check_correct_type()函数进行monkeypatch,只要它确实是一个像这样的独立函数:

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

third_party_library.check_correct_type = my_check_correct_type
于 2015-03-08T12:52:14.680 回答