Python getslice项运算符重写函数不工作

Python getslice项运算符重写函数不工作,python,class,oop,operators,Python,Class,Oop,Operators,练习为学习Python OOP而发布的示例。我正在寻找“1到4”的输出,但它会抛出下面的错误 class FakeList: def __getslice___(self,start,end): return str(start) + " to " + str(end) f = FakeList() f[1:4] 注意:使用f.\uuuu getitem\uuuu(1,4)会得到正确的输出--“1到4”,如上面的链接所示 回溯(最近的呼叫) 最后)在() ---

练习为学习Python OOP而发布的示例。我正在寻找“1到4”的输出,但它会抛出下面的错误

class FakeList:
     def __getslice___(self,start,end):
         return str(start) + " to " + str(end)

f = FakeList()

f[1:4]
注意:使用
f.\uuuu getitem\uuuu(1,4)
会得到正确的输出--“1到4”,如上面的链接所示

回溯(最近的呼叫) 最后)在() ---->1F[1:4]

TypeError:“FakeList”对象不可下标


如注释中所述,
\uu getitem\uuu
方法采用一个
slice
类型的参数,您可以通过
slice.start
slice.stop
访问范围的开始/结束,下面是一个示例,其中包含一些调试输出,以显示发生了什么:

class FakeList:

    def __getitem__(self, slice_):
         print('slice_', slice_)
         print('type(slice_)', type(slice_))
         print('dir(slice_)', dir(slice_))
         return str(slice_.start) + " to " + str(slice_.stop)

f = FakeList()

print(f[1:4])
输出:

slice_ slice(1, 4, None)

type(slice_) <class 'slice'>

dir(slice_) ['__class__', '__delattr__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', 'indices', 'start', 'step', 'stop']

1 to 4
slice\uuslice(1,4,无)
类型(切片)
目录(切片)[''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''',
“\uuuuuu eq\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
"散列","初始化","列","列","列","新",,
"减少","减少","增加","报告","设置属性","大小",,
“\uuuu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
1至4

什么是Python版本?不要使用
\uu getslice\uu
,它早就被弃用并在Python 3中删除了。使用
\uuuuuuu getitem\uuuuuuuu
,它支持切片对象。使用“getitem”代替still会导致错误。使用“getitem”时,新的错误为:“TypeError:\uuuuuuuuu getitem\uuuuuu()缺少1个必需的位置参数:'end'”