Il y a d'excellentes réponses ici, et donc avant de donner la mienne, je voudrais souligner quelques-unes des gemmes (sans jeu de mots rubis) que j'ai lues ici.
- Python n'est pas un langage OOP pur - c'est un langage multi-paradigme à usage général qui permet au programmeur d'utiliser le paradigme avec lequel il est le plus à l'aise et / ou le paradigme le mieux adapté à sa solution.
- Python a des fonctions de première classe, tout
len
comme un objet. Ruby, d'autre part, n'a pas de fonctions de première classe. Ainsi, l' len
objet fonction possède ses propres méthodes que vous pouvez inspecter en exécutant dir(len)
.
Si vous n'aimez pas la façon dont cela fonctionne dans votre propre code, il est trivial pour vous de réimplémenter les conteneurs en utilisant votre méthode préférée (voir l'exemple ci-dessous).
>>> 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(someObj)
ne remet passomeObj
de »__len__
fonction? tl; dr Oui, utilisez donc toujourslen()
au lieu de__len__()
.