Zitat von
OpOs
es ist in einer rein objektorientierten sprache (als was einem python ja immer verkauft wird)
Python ist eine multi-paradigm-Sprache. Imperative, objektorientierte, funktionelle und teilweise auch aspektorientierte Programmierung wird unterstützt.
von daher sollte das implizierte uebergeben von self standard sein.
Das Widerspricht der Python-Philosophie: "explicit is better than implicit"
und eine methode zu deklarieren, die verschiedene arten von eingabedaten akzeptiert und dann eine pruefung auf jede moegliche kombination von typen ist sicher nicht angenehmer, als in einer typisierten sprache eine methode einfach zu ueberladen...
Wenn man sowas macht, versucht man, C++ oder Java in Python zu programmieren und macht etwas falsch. Slange die übergebenen Objekte die benutzen Methoden implementieren, ist es Wurst, von welcher Klasse sie abgeleitet sind. In der Praxis überlädt meine eine Methode ja auch höchstens so:
Code:
int foo(int bar, int baz);
int foo(float bar, float baz);
int foo(SupidupiInt bar, SupidupiInt baz);
und nicht so
Code:
int foo(int bar, int baz);
int foo(FILE* zieldatei, const char* zu_schreibender_string)
Und ob nun der Compiler meckert, oder es beim Unittesting auffällt, ist es (ja, ich weiss, nicht jeder schreibt gute unitttests )
Aber du hast recht, ein "Interface"-System wie bei Java wäre ganz nett. Aber so liest man halt die Doku der Methode, um zu sehen, welche Art von Parametern erwartet wird.
Ich programmiere seit einiger Zeit beruflich in Java, und ich muss sagen, die Typdeklaration hat mich bis jetzt nur Zeit gekostet. Einmal hat sie dazui geführt, dass der Compiler meckerte, weil ich zwei Parameter vertauscht hatte, aber das hätte ich in Python auch beim nachfolgenden Test bemerkt.
Als ich mit Python anfingt, hatte ich auch Bedenken ob des "Duck-typing" Ansatzes und den fehlendem private. In der Praxis bringt das aber mehr Vorteile als die theoretischen Nachteile.
wenn ich mir packages wie "_mysql", "PIL" oder auch einige standardmodule anschaue, kann ich das nicht glauben... "StringIO.StringIO"??? wtf...
Ja, das Crux der Rückwärtskompabilität. Ich denke mal, dass wird in Python 3000 auch korrigiert.
Lesezeichen