interface

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kostonstyle
User
Beiträge: 148
Registriert: Sonntag 2. November 2008, 12:13

hallo miteinander
kann man in python eigenen Interfaces programmieren? Warum benutzt man immer noch häufig die Python Version 2.6 anstatt 3?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
Was verstehst Du unter einem "Interface"?
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.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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.)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Leonidas
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
kostonstyle
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?
Benutzeravatar
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

kostonstyle hat geschrieben:das frage ich mich auch immer, warum Python die Mehrfachvererbung erlaubt, das wäre Interface schon viel eleganter.
Wieso wäre es denn eleganter?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

kostonstyle hat geschrieben:das frage ich mich auch immer, warum Python die Mehrfachvererbung erlaubt, das wäre Interface schon viel eleganter. Oder nicht?
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.

Stefan
Antworten