Jestem świadomy tworzenia niestandardowej metody __repr__
lub __add__
(i tak dalej), aby zmodyfikować zachowanie operatorów i funkcji. Czy istnieje nadpisanie metody dla len
?Czy można zmodyfikować zachowanie len()?
Na przykład:
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.
można to zrobić za len
z listy? Normalnie wyglądałoby to tak:
foo = []
print(len(foo)) # 0
foo = [1, 2, 3]
print(len(foo)) # 3
Co zrobić, jeśli chcę pozostawić typy wyszukiwania poza policzeniem? Tak:
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
Czy istnieje sposób to zrobić z poziomu list
podklasy?
Masz już dobre odpowiedzi, ale w przypadku, gdy chcesz dowiedzieć się więcej o magicznych sposobach mogę zasugerować [Przewodnik Pythona Magicznych Metod] (http: // www. rafekettler.com/magicmethods.html);) – swenzel
To przyda się całkiem sporo! Dziękuję za udostępnienie. @ swenzel –
Masz podklasę listy, a nie nadklasę listy. – wim