len是如何工作的?

3 投票
4 回答
12150 浏览
提问于 2025-04-15 18:42

在Python中,len是怎么工作的呢?

看看这个例子:

class INT(int):
    pass

class STR(str):

    def __len__(self):
        return INT(42)

q = STR('how').__len__()
print q, type(q)
q = len(STR('how'))
print q, type(q)

输出结果是:

42 <class '__main__.INT'>
42 <type 'int'>

我该怎么做才能让len返回一个整数(INT)呢?

有些回答建议,唯一的解决办法是重写len

这是我提供的另一种实现方式。看起来并没有什么坏处。

original_len = len
def len(o):
    l = o.__len__()
    if isinstance(l, int):
        return l
    original_len(o)

4 个回答

3

正如其他人所说,不要这样做。想想如果使用这个类会是什么样子:

length = len(s)     # the reader assumes `q` is an int.
length.in_yards()   # the reader is going WTF?!

与其让读者感到困惑,不如直接添加一个不同的方法:

s.length_in_yards()

附言:虽然这并没有解决问题,但如果你有充分的理由去写自定义的类似整数的对象,你可能会对__index__这个特殊方法感兴趣,它可以让这样的对象直接用于索引内置的序列。

4

不要这样做。你需要明白,有时候最好的答案就是根本不要去做你想做的事情。这就是其中一个例子。

3

我觉得你可能做不到,除非你自己写一个 len 函数。内置的 len 函数总是返回一个整数。

撰写回答