【发布时间】:2011-01-11 10:23:24
【问题描述】:
len 在 Python 上是如何工作的?
看这个例子:
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)
【问题讨论】:
-
不想这样做。为什么你认为这是一个好主意?
-
我同意铁蛙的观点。你实际上想要完成什么?您的 int 子类与 int 有何不同?
-
当然,示例中的 INT 类只是一个示例。
标签: python