Ersatz für Interfaces in Python?

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
brubb
User
Beiträge: 5
Registriert: Sonntag 4. Mai 2008, 12:46

Sonntag 4. Mai 2008, 13:32

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Sonntag 4. Mai 2008, 14:02

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 :-)
TUFKAB – the user formerly known as blackbird
BlackJack

Sonntag 4. Mai 2008, 17:26

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.
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Dienstag 6. Mai 2008, 22:48

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 ;-)
maxip
User
Beiträge: 61
Registriert: Dienstag 11. März 2008, 09:43

Mittwoch 7. Mai 2008, 09:51

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 7. Mai 2008, 09:57

Und was genau willst du für Fehler durch die Benutzung von Interfaces innerhalb von Python finden? Python ist einfach kein Java.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Mittwoch 7. Mai 2008, 10:02

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<<
Zuletzt geändert von Masaru am Mittwoch 7. Mai 2008, 10:06, insgesamt 2-mal geändert.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Mittwoch 7. Mai 2008, 10:04

Sowas ähnliches wird es mit Abstract Base Classes in Python 3 dann geben.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Mittwoch 7. Mai 2008, 11:17

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.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Mittwoch 7. Mai 2008, 12:09

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?
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Mittwoch 7. Mai 2008, 12:19

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.
BlackJack

Mittwoch 7. Mai 2008, 12:23

@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.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 7. Mai 2008, 12:27

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.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Mittwoch 7. Mai 2008, 12:31

*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 ...".
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 7. Mai 2008, 13:46

Für alle die es dennoch kompliziert mögen, gibt es zope.interface.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten