Seite 1 von 1

Ersatz für Interfaces in Python?

Verfasst: Sonntag 4. Mai 2008, 13:32
von brubb
Hallo,

was wird denn in Python an Stelle von Interfaces genommen? (wie man sie aus c# oder php kennt)

Bitte auch ein ganz kleines Beispiel :-)

Vielen Dank im Voraus, brubb

Verfasst: Sonntag 4. Mai 2008, 14:02
von mitsuhiko
PHP Interfaces sind ein Witz und C# Interfaces sind eine Ausrede keine Multiple Inheritance zu haben. Haben wir in Python aber, also einfach Mixin Klassen verwenden :-)

Verfasst: Sonntag 4. Mai 2008, 17:26
von BlackJack
Bzw. sie einfach weglassen. Die sind in statisch typisierten Sprachen für die statische Typprüfung. Gibt's in dynamisch typisierten Sprachen nicht -> also sind die Interfaces als Syntaxkonstrukt unnötig.

Verfasst: Dienstag 6. Mai 2008, 22:48
von Mad-Marty
Oder wenn dir die formulierung besser gefällt: in python programmierst du immer auf ein interface ;) (... und hoffst das das jeweilige object sich so verhält ;-)

Verfasst: Mittwoch 7. Mai 2008, 09:51
von maxip
Es waere aber schon schoen, wenn Python Interfaces haette. z.B. koennte man mit nem Interface schon zur entwicklungszeit mehr fehler entdecken

so Sachen wie Iteratable usw. find ich doch recht praktisch und uebersichtlich

Verfasst: Mittwoch 7. Mai 2008, 09:57
von EyDu
Und was genau willst du für Fehler durch die Benutzung von Interfaces innerhalb von Python finden? Python ist einfach kein Java.

Verfasst: Mittwoch 7. Mai 2008, 10:02
von Masaru
Interfaces machen in Python, als eine Typfreie Spache, einfachen keinen Sinn.

Schnittstellen kannst du in Java und C# entsprechend implementieren. In C++ würde man ein wenig modifiziert mit Templates vorgehen ... und in Python maximal wie folgt:

Code: Alles auswählen

class ContainerTemplate(object):
    def __init__(self): raise NotImplementedError
    def add(self, value): raise NotImplementedError
    def remove(self, value): raise NotImplementedError
    ...
... aber nicht mehr und nicht weniger.
Dadurch dass alle Funktionen "NotImplementedError" werfen (sogar __init__), hat man eine Verpflichtung die ableitenden Klassen voll zu implementieren.

Ist aber letztendlich in meinen Augen Mehraufwand, der auch der Übersichtlichkeit nicht gerade dienlich ist.

>>Masaru<<

Verfasst: Mittwoch 7. Mai 2008, 10:04
von helduel
Sowas ähnliches wird es mit Abstract Base Classes in Python 3 dann geben.

Verfasst: Mittwoch 7. Mai 2008, 11:17
von mkesper
Masaru hat geschrieben:Interfaces machen in Python, als eine Typfreie Spache, einfachen keinen Sinn.
Vorsicht: Python ist dynamisch und stark typisiert. Typfreie Sprachen (Rexx-Varianten soviel ich weiß z.B.) prüfen gar nicht auf verschiedene Typen, kennen also keine Unterscheidung String versus Zahl oder Ähnliches.

Verfasst: Mittwoch 7. Mai 2008, 12:09
von Masaru
Gut, sagen wir dann besser Typvereinbarungsfreie Sprachen ;).

Letztendlich werden in Python ja Ausdrücke erst zur Laufzeit "ausgewertet". Eine Variable hat keine feste Bindung an einen Datentyp und kann alles mögliche annehmen:

Code: Alles auswählen

a=6
a='test'
a=datetime.datetime.now()
...
Oder?

Verfasst: Mittwoch 7. Mai 2008, 12:19
von keppla
maxip hat geschrieben:Es waere aber schon schoen, wenn Python Interfaces haette. z.B. koennte man mit nem Interface schon zur entwicklungszeit mehr fehler entdecken
In python würde ich sagen, dass du da unittests machen solltest, da kannst du dann auch noch mehr Abfragen als die Singatur von Methoden.

Verfasst: Mittwoch 7. Mai 2008, 12:23
von BlackJack
@Masaru: Statt "Typvereinbarungsfreie Sprache" hat sich "dynamisch typisierte Sprache" durchgesetzt. :-)

Und eine Variable hat zu einem gegebenen Zeitpunkt immer einen festen Typ, darum ist Python *stark typisiert*. Nur das der Typ dem Wert und nicht dem Namen fest zugeordnet ist.

Verfasst: Mittwoch 7. Mai 2008, 12:27
von EyDu
Masaru hat geschrieben:Gut, sagen wir dann besser Typvereinbarungsfreie Sprachen ;).
Nee, dynamische und starke/strenge Typisierung sind für Python genau die richtige Kategorien. Schmeiß mal Wikipedia an, da sollten Erläuterungen zu den Begriffen stehen.

Verfasst: Mittwoch 7. Mai 2008, 12:31
von Masaru
*hehe* Mit BlackJacks Begründung und Definition der "dynamischen Typisierung" kann ich gut leben :)

Die klassifizierte starke Typisierung, würde ich "stark" in Anführungszeichen jedoch eher setzen.

Die Definition von Wikipedia sagt ja selber aus: "... Das Konzept der starken Typisierung ist nicht eindeutig definiert ..." und "... Keine der genannten Sprachen gengüt allen Definitionen ...".

Verfasst: Mittwoch 7. Mai 2008, 13:46
von Leonidas
Für alle die es dennoch kompliziert mögen, gibt es zope.interface.