我有一堂课:

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'>


我究竟做错了什么?

最佳答案

我认为您想要更多类似以下内容的东西:

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

关于python - 在Python中覆盖__get__的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26920893/

10-13 08:30