MutableSequence在isinstance()检查中作为列表传递

时间:2015-03-08 12:35:22

标签: python python-2.7 collections isinstance

我基于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)的实例?

1 个答案:

答案 0 :(得分:2)

不,如果没有从list继承,您的类的实例就无法通过该测试。您子类list来传递该测试。

您可以尝试继承MutableSequencelist;我们会在MutableSequence上查找您的班级或list未实现的任何方法或属性,这样您就可以获得额外的方法,这些方法可能不会出现这种情况,并且可能会出现意外情况:

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