Как работает 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)