在Python中覆盖__get__的问题

时间:2014-11-14 00:17:01

标签: python list inheritance

我有一个班级:

from collections import UserList


class ItemList(UserList):
    data = []

    def __init__(self, contents):
        self.data = contents

    def __get__(self, index):
        result = list.__get__(self, index)
        if type(result) is list:
            if len(result) > 1:
                return ItemList(result)
        else:
            return result

在我的情况下,当我索引ItemList类的实例时,甚至没有调用 get 。我正在尝试做的是,如果索引的结果返回多个项(列表),则返回ItemClass的新实例。所以我希望如此:

>>> il = ItemList(contents)
>>> type(il[1:3])
<class 'ItemList'>

但我得到了这个:

>>> il = ItemList(contents)
>>> type(il[1:3])
<class 'list'>

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我认为你想要更像以下内容:

class ItemList(UserList):
    data = []
    def __init__(self, contents):
        super().__init__()
        self.data = contents
    def __getitem__(self, item):
        result = UserList.__getitem__(self, item)
        if type(result) is list:
            if len(result) > 1:
                return ItemList(result)
        else:
            return result