Python列表数组:禁用切片中的负索引回绕

Python列表数组:禁用切片中的负索引回绕,第1张

Python列表/数组:禁用切片中的负索引回绕

我的猜测是,您将必须围绕所需的对象创建自己的子类包装器,然后重新实现

__getitem__()
将否定键转换为
None
,然后调用超类
__getitem__

请注意,我的建议是对现有的自定义类进行子类化,但不要像

list
或那样内置
dict
。这仅仅是为了使实用程序围绕另一个类,而不是混淆类型的正常预期 *** 作
list
。您可能希望在特定上下文中使用一段时间,直到 *** 作完成。最好避免进行全局不同的更改,这会使您的代码用户感到困惑。

资料模型

目的。 getitem (self,key)
调用以实现对self [key]的评估。对于序列类型,可接受的键应为整数和切片对象。请注意,负索引的特殊解释(如果类希望模拟序列类型)取决于
getitem
()方法。如果键的类型不合适,则可能引发TypeError;如果该值在该序列的索引集之外(在对负值进行任何特殊解释之后),则应引发IndexError。对于映射类型,如果缺少键(不在容器中),则应引发KeyError。

您甚至可以创建一个仅将实例作为arg的包装器,然后将所有

__getitem__()
调用延迟给该私有成员,同时转换键,以用于您无法或不想继承类型的情况,而只是想要任何序列对象的实用程序包装。

后一种建议的快速示例:

class NoWrap(object):    def __init__(self, obj, default=None):        self._obj = obj         self._default = default    def __getitem__(self, key):        if isinstance(key, int): if key < 0:     return self._default        return self._obj.__getitem__(key)In [12]: x = range(-10,10)In [13]: x_wrapped = NoWrap(x)In [14]: print x_wrapped[5]-5In [15]: print x_wrapped[-1]None In [16]: x_wrapped = NoWrap(x, 'FOO')In [17]: print x_wrapped[-1]FOO


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5654960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存