hallo miteinander
kann man in python eigenen Interfaces programmieren? Warum benutzt man immer noch häufig die Python Version 2.6 anstatt 3?
interface
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was verstehst Du unter einem "Interface"?kostonstyle hat geschrieben:hallo miteinander
kann man in python eigenen Interfaces programmieren? Warum benutzt man immer noch häufig die Python Version 2.6 anstatt 3?
Edit: Ok, habe mal das PEP 245 überflogen
Es gibt hier viele Threads zu Thema 2.x vs. 3 - lies die Dir einfach mal durch (aktuell ist da grad auch einer im Unterforum Web und Netzwerk).
Zuletzt geändert von Hyperion am Mittwoch 16. September 2009, 10:57, insgesamt 1-mal geändert.
ad 1) Ja, klar.
ad 2) Weil noch recht wenige Module nach 3.x portiert sind (außerhalb der Standardlibrary).
edit: Zu langsam ... (Als Interface fasse ich z. B. GUIs, CLIs, web-interfaces auf.)
ad 2) Weil noch recht wenige Module nach 3.x portiert sind (außerhalb der Standardlibrary).
edit: Zu langsam ... (Als Interface fasse ich z. B. GUIs, CLIs, web-interfaces auf.)
In Python macht man Interface-Typen, wie man sie z.B. in Java kennt selten explizit sondern lässt sie implizit als Teil der Dokumentation entstehen ("muss wie ein `dict` funktionieren", "ist `file`-artig").
Python kann dafür seine Mehrfachvererbung für Mixins a.k.a. Traits, wie man sie z.B. in Scala (oder Ruby oder Smalltalk oder Fortress) findet, einsetzen. Das ist das eigentlich mächtigere Konzept - sieht man einmal von dem Fehlen statischer Typen ab.
In Python 3 kann man sich seine Typprüfungen selbst bauen, wenn man möchte, da die Sprache es zulässt, dass man `def a(x: int, y: int) -> int: return x+y` schreibt. Nun kann man sich `a.__annotations__` anschauen und dort die Objekte lesen, wie man stellvertretend für Typen benutzt hat (ich habe das Klassenexemplar `int` benutzt) und Dinge und Sachen damit anstellen.
Stefan
Python kann dafür seine Mehrfachvererbung für Mixins a.k.a. Traits, wie man sie z.B. in Scala (oder Ruby oder Smalltalk oder Fortress) findet, einsetzen. Das ist das eigentlich mächtigere Konzept - sieht man einmal von dem Fehlen statischer Typen ab.
In Python 3 kann man sich seine Typprüfungen selbst bauen, wenn man möchte, da die Sprache es zulässt, dass man `def a(x: int, y: int) -> int: return x+y` schreibt. Nun kann man sich `a.__annotations__` anschauen und dort die Objekte lesen, wie man stellvertretend für Typen benutzt hat (ich habe das Klassenexemplar `int` benutzt) und Dinge und Sachen damit anstellen.
Stefan
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
In Python 2.x könnte man mit Dekoratoren auch Typprüfungen machen, wo die gewünschten Typen einfach dem Dekorator übergeben werden und der vor dem Aufruf der Funktion prüft und nach dem Aufruf den Rückgabewert betrachtet. Ist natürlich nicht statisch, aber das wären die Annotations auch nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 148
- Registriert: Sonntag 2. November 2008, 12:13
das frage ich mich auch immer, warum Python die Mehrfachvererbung erlaubt, das wäre Interface schon viel eleganter. Oder nicht?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Und warum willst du von denen erben? Man braucht die Typen nicht, sondern Python reicht es, wenn die Objekte sich so verhalten wie der gewuenschte Typ.
Da du das Protokoll sowieso implementieren musst, verkommt das erben von einem Interface zu Clutter.
Da du das Protokoll sowieso implementieren musst, verkommt das erben von einem Interface zu Clutter.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Wieso wäre es denn eleganter?kostonstyle hat geschrieben:das frage ich mich auch immer, warum Python die Mehrfachvererbung erlaubt, das wäre Interface schon viel eleganter.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ein wäre es nicht. Denn es sind zwei verschiedene Dinge. Interfaces (a la Java) beschreiben *Typen*. Das ist etwas anderes als *Klassen*. Diese implementieren, welche Methoden ihren Exemplaren zur Verfügung stehen. Eine Klasse ist also eigentlich nicht mehr als ein Satz von Methoden. Wenn ich diese jetzt zu neuen Klassen flexibel kombinieren kann, das ist das etwas, das ich zwar mit Interfaces beschreiben, nicht aber *implementieren* kann.kostonstyle hat geschrieben:das frage ich mich auch immer, warum Python die Mehrfachvererbung erlaubt, das wäre Interface schon viel eleganter. Oder nicht?
Stefan