Ci sono alcune risposte fantastiche qui, e quindi prima di dare la mia vorrei evidenziare alcune delle gemme (nessun gioco di rubini previsto) che ho letto qui.
- Python non è un linguaggio OOP puro: è un linguaggio multi-paradigma per scopi generali che consente al programmatore di utilizzare il paradigma con cui si trova più a suo agio e / o il paradigma più adatto alla propria soluzione.
- Python ha funzioni di prima classe, quindi in
len
realtà è un oggetto. Ruby, d'altra parte, non ha funzioni di prima classe. Quindi l' len
oggetto funzione ha i propri metodi che è possibile controllare eseguendo dir(len)
.
Se non ti piace il modo in cui funziona nel tuo codice, è banale implementare nuovamente i contenitori usando il tuo metodo preferito (vedi esempio sotto).
>>> class List(list):
... def len(self):
... return len(self)
...
>>> class Dict(dict):
... def len(self):
... return len(self)
...
>>> class Tuple(tuple):
... def len(self):
... return len(self)
...
>>> class Set(set):
... def len(self):
... return len(self)
...
>>> my_list = List([1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'])
>>> my_dict = Dict({'key': 'value', 'site': 'stackoverflow'})
>>> my_set = Set({1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'})
>>> my_tuple = Tuple((1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'))
>>> my_containers = Tuple((my_list, my_dict, my_set, my_tuple))
>>>
>>> for container in my_containers:
... print container.len()
...
15
2
15
15
len
. Pensano che sia più facile forzare le persone a implementare.__len__
che forzare le persone a implementare.len()
. È la stessa cosa e uno sembra molto più pulito. Se la lingua avrà un OOP__len__
, qual è il punto di partenza del mondolen(..)