[英]getslice deprecated in Python2.6, but still in use when subclassing tuple?
考虑下面的例子,在Python 2.6.6下执行(我现在不幸地被困住了):
>>> class A:
... def __getitem__(self, index):
... print(type(index))
... def __getslice__(self, start, end):
... print("Don't call me, I'm deprecated")
...
>>> a = A()
>>> a[3]
<type 'int'>
>>> a[3:3]
<type 'slice'>
应该是这样,切片也调用__getitem__
。 现在将定义更改为子类化tuple
:
>>> class B(tuple):
... def __getitem__(self, index):
... print(type(index))
... def __getslice__(self, start, end):
... print("Don't call me, I'm deprecated")
...
>>> b = B()
>>> b[3]
<type 'int'>
>>> b[3:]
Don't call me, I'm deprecated
为什么会这样?
由于历史原因, __getslice__
在某些地方仍然被用于内置类型。 所以对于一个元组,它确实被用于切片的[i:j]
样式语法。 请参阅: http : //bugs.python.org/issue2041 ,以获取简要说明以及getslice文档中突出显示的警告
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.