Sono a conoscenza della creazione di un metodo personalizzato __repr__
o __add__
(e così via), per modificare il comportamento di operatori e funzioni. Esiste un metodo di sostituzione per len
?È possibile modificare il comportamento di len()?
Ad esempio:
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.
Questo potrebbe essere fatto per len
, con una lista? Normalmente, sarebbe simile a questa:
foo = []
print(len(foo)) # 0
foo = [1, 2, 3]
print(len(foo)) # 3
Cosa succede se voglio lasciare tipi di ricerca fuori dal conteggio? Come questo:
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
C'è un modo per fare questo all'interno di un list
sottoclasse?
Hai già buone risposte, ma nel caso in cui si desidera saperne di più sui metodi di magia che posso suggerire [Una guida ai metodi magici di Python] (http: // www. rafekettler.com/magicmethods.html);) – swenzel
Questo ti tornerà utile un bel po '! Grazie per la condivisione. @swenzel –
Hai una sottoclasse lista, non una superclasse lista. – wim