我的猜测是,您将必须围绕所需的对象创建自己的子类包装器,然后重新实现
__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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)