对于充当无限序列的对象,__len__的正确返回值

tre*_*kby 4 python infinite python-datamodel

我正在编写一个python类,它充当一个不可变的无限序列.

该类不使用生成器来访问此无限序列,而是根据__getitem__方法中的算法为序列中的任意索引生成值.

我很好奇处理__len__这种对象的方法的最佳方法是什么.理想情况下,我会回过头float("inf")__len__.但是,在幕后len()调用对象__len__方法的函数需要一些特定的值.

如果__len__设置为返回float("inf")或decimal.Decimal("Infinity"),len()则通过引发TypeError来拒绝它.它还拒绝"-1"的值,这意味着序列是无限的.此外,当我试图用一个无边类,我碰巧早前撰文指出,确实在事实上继承int,len()无论出于何种原因返回0.

虽然让值只是"0"并不是一个很大的不便,虽然像这样的类很不寻常,但我仍然很想知道,有没有一种很好的方法来处理类的长度属性那是一个无限的序列?

Sin*_*ion 5

__len__()必须返回一个有效的整数.既然你不能,你应该不实现__len__(),如果你的序列总是无限的,或者ValueError如果你有时可以给出一个有意义的长度,你应该提出.