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

如何在其派生类中覆盖list的slice功能

公羊浩阔
2023-03-14
问题内容

我进行如下课程:

class MyList(list):
    def __init__(self, lst):
        self.list = lst

我希望切片功能在MyList中被覆盖


问题答案:

您需要提供自定义__getitem__()__setitem____delitem__挂钩。

切片列表时,将这些切片对象传递给切片对象。这些有startstopstep属性。但是,这些值可以是None,以指示默认值。请注意,当您使用负步幅时,默认值实际上会改变!

但是,它们也有一种slice.indices()方法,当给定长度时会生成(start, stop, step)适合range()对象的值的元组。此方法会处理令人讨厌的细节,例如以负的步幅进行切片,并且没有开始或停止索引:

def __getitem__(self, key):
    if isinstance(key, slice):
        indices = range(*key.indices(len(self.list)))
        return [self.list[i] for i in indices]
    return self.list[key]

或者,对于您的情况:

def __getitem__(self, key):
    return self.list[key]

因为alist可以slice直接拿物体。

在Python
2中,list.__getslice__如果实现了切片,则可以不加跨步地调用切片(因此,仅起始索引和终止索引),并且内置list类型实现了切片,因此您也必须覆盖它。一个简单的委托给您的__getitem__方法应该可以:

def __getslice__(self, i, j):
    return self.__getitem__(slice(i, j))


 类似资料:
  • 问题内容: 我正在将我的某些类从对getter和setter的广泛使用改为对属性的更pythonic的使用。 但是现在我陷入了困境,因为以前的一些getter或setter方法会调用基类的相应方法,然后执行其他操作。但是如何通过属性来实现呢?如何在父类中调用属性getter或setter? 当然,仅调用属性本身即可进行无限递归。 问题答案: 您可能认为您可以调用由属性调用的基类函数: 尽管我认为这

  • 我正在开发一个模式锁定应用程序。 问题是,当手机屏幕关闭时,我的锁定活动显示为解锁,但当我按下移动主页键时,它就工作了。 在进入解锁模式之前,我想覆盖home key功能(因为它不工作)。 我谷歌了一下,但没有得到任何解决方案。 请帮帮我。

  • 问题内容: 我正在尝试从open jdk更改某些类,所以我正在创建与open jdk类相同的包结构,并且正在使用netbeans更改类。当我在构建项目时,如果覆盖类中出现问题,我会收到错误消息。如果成功构建了我的项目,则应用程序似乎不考虑我对类的更改,而是使用打开的jdk类。知道我该如何使用我的类而不是openjdk的类? 例: 如果我在项目中创建类 _sun.net.www.protocol.h

  • 问题内容: 我正在使用Spring Boot,并在开发过程中选择了一个数据库。 在生产期间,我想在应用程序上下文之外创建一个文件,该文件应该被加载,然后使用d:/application.properties激活不同的配置文件: 结果:启动应用程序时,配置仍为,因此不考虑生产属性文件的其他位置。我有什么想念的吗? 弹簧靴1.1.0.BUILD-SNAPSHOT 注意:这个问题 不是 关于 tomca

  • 我使用spring boot和在开发过程中通过选择数据库。 在生产过程中,我希望在应用程序上下文之外创建一个应该加载的文件,然后使用d:/application.properties激活一个不同的配置文件: 结果:当我启动应用程序时,配置仍然是,因此不知道怎么地没有考虑生产性属性文件的附加位置。我错过什么了吗? spring boot 1.1.0.build-快照 注意:这个问题不是关于Tomca

  • 问题内容: 我目前在glassfish v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。 我已经看过源代码-在我的情况下,它是(catalina代码库),它将初始请求保存在会话中的对象中,但是该会话不是,因此没有直接方法可以访问它。 还是