Hier gibt es einige großartige Antworten, und bevor ich meine eigenen gebe, möchte ich einige der Edelsteine hervorheben (kein Rubinwortspiel beabsichtigt), die ich hier gelesen habe.
- Python ist keine reine OOP-Sprache - es ist eine universelle Mehrparadigmensprache, mit der der Programmierer das Paradigma verwenden kann, mit dem er sich am besten auskennt, und / oder das Paradigma, das für seine Lösung am besten geeignet ist.
- Python hat erstklassige Funktionen,
len
ist also eigentlich ein Objekt. Ruby hingegen hat keine erstklassigen Funktionen. Das len
Funktionsobjekt verfügt also über eigene Methoden, die Sie durch Ausführen überprüfen können dir(len)
.
Wenn Ihnen die Funktionsweise in Ihrem eigenen Code nicht gefällt, ist es für Sie trivial, die Container mit Ihrer bevorzugten Methode erneut zu implementieren (siehe Beispiel unten).
>>> 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
ist. Sie denken, dass es einfacher ist, Menschen zur Umsetzung.__len__
zu zwingen , als Menschen zur Umsetzung zu zwingen.len()
. Es ist das gleiche und man sieht viel sauberer aus. Wenn die Sprache eine OOP haben wird__len__
, was in aller Welt ist der Sinn derlen(..)