Мне известно о создании настраиваемого метода __repr__
или __add__
(и т.д.), чтобы изменить поведение операторов и функций. Есть ли метод переопределения для len
?
Например:
class Foo:
def __repr__(self):
return "A wild Foo Class in its natural habitat."
foo = Foo()
print(foo) # A wild Foo Class in its natural habitat.
print(repr(foo)) # A wild Foo Class in its natural habitat.
Это можно сделать для len
, со списком? Обычно это будет выглядеть так:
foo = []
print(len(foo)) # 0
foo = [1, 2, 3]
print(len(foo)) # 3
Что делать, если я хочу оставить типы поиска вне счета? Вот так:
class Bar(list):
pass
foo = [Bar(), 1, '']
print(len(foo)) # 3
count = 0
for item in foo:
if not isinstance(item, Bar):
count += 1
print(count) # 2
Есть ли способ сделать это из подкласса list
?