我基于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)
的实例?
答案 0 :(得分:2)
不,如果没有从list
继承,您的类的实例就无法通过该测试。您有子类list
来传递该测试。
您可以尝试继承MutableSequence
和list
;我们会在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