当前位置: 首页 > 面试题库 >

如何在没有类型问题的情况下继承Python列表?

卫沈义
2023-03-14
问题内容

我想在Python中实现自定义列表类作为的子类listlist为了获得所有列表操作的完全类型兼容性,我需要从基类中重写的最少方法集是什么?

这个问题表明至少__getslice__需要重写。从进一步的研究,也__add____mul__是必需的。所以我有这段代码:

class CustomList(list):
    def __getslice__(self,i,j):
        return CustomList(list.__getslice__(self, i, j))
    def __add__(self,other):
        return CustomList(list.__add__(self,other))
    def __mul__(self,other):
        return CustomList(list.__mul__(self,other))

下列语句即使没有覆盖方法也可以按需工作:

l = CustomList((1,2,3))
l.append(4)                       
l[0] = -1
l[0:2] = CustomList((10,11))    # type(l) is CustomList

这些语句仅与上述类定义中的覆盖方法一起使用:

l3 = l + CustomList((4,5,6))    # type(l3) is CustomList
l4 = 3*l                        # type(l4) is CustomList
l5 = l[0:2]                     # type(l5) is CustomList

我唯一不知道如何实现的是使扩展切片返回正确的类型:

l6 = l[0:2:2]                   # type(l6) is list

我需要在类定义中添加些什么才能获得CustomList类型l6

另外,除了扩展切片之外,是否还有其他列表操作,其结果将是list类型而不是类型CustomList


问题答案:

首先,我建议您遵循BjörnPollex的建议](+1)。

为了克服这个特殊问题(type(l2 + l3) == CustomList),您需要实现一个自定义__add__()

   def __add__(self, rhs):
        return CustomList(list.__add__(self, rhs))

对于扩展切片:

    def __getitem__(self, item):
        result = list.__getitem__(self, item)
        try:
            return CustomList(result)
        except TypeError:
            return result

我也建议…

pydoc list

…在命令提示符下。您将看到list公开了哪些方法,这将为您提供有关需要重写哪些方法的良好指示。



 类似资料:
  • 问题内容: 在开发桌面应用程序时,我在Oracle Network上关注本文以实现MVC。但是,我有一个问题:我正在使用由和扩展的抽象 Directory 类。模型管理器方法之一接受Directory作为参数: 抽象控制器使用setModelProperty调用此方法: 我从实际的控制器中这样调用它: 我认为我有: 我有以下错误: 我该如何解决这个问题?我在使用时缺少一些东西。 编辑:我已经阅读了

  • 问题内容: 我想向内置类型添加一些属性,所以我这样写: 但仅包含元素。为什么我在这里不工作?我应该如何从类似内置类型的继承?像这样的不可变类型是否相同? 问题答案: 该类型通常在其方法内进行列表的实际初始化,因为这是可变类型的约定。子类型化不可变类型时,只需要覆盖即可。虽然 可以在对列表进行子分类时覆盖,但对于您的用例而言,这样做没有多大意义。覆盖比较容易: 另请注意,在这种情况下,建议不要使用。

  • 我在应用程序中实现了firebase,以便使用它的通知服务,它工作了,今天决定使用它的键/值特性,但意识到无论我在从继承的类中编写什么,都不会发生任何事情。所以我决定移除my类以达到dubugging的目的,但我还是收到了通知。所以我从清单中删除了firebase消息传递服务,删除了应用缓存并运行了项目,但我仍然得到通知!我能阻止通知到来的唯一方法是移除Gradle中的firebase依赖项。这里

  • 我正在尝试安装一个没有依赖项的python模块。 我跑: 但是这个安装依赖项,任何想法怎么能做到这一点?

  • 问题内容: 我是Python的新手,正在尝试安装此模块:http : //www.catonmat.net/blog/python-library-for-google- search/ 目录中没有setup.py,但是有以下文件: 有人可以告诉我如何设置或使用此模块吗? 谢谢! 问题答案: 在系统上开始使用该代码的最简单方法是: 将文件放入计算机上的目录中, 将该目录的路径添加到您的PYTHON