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
Ersatz für Interfaces in Python?
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
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
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.
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: ... 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<<
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
...
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.
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
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.Masaru hat geschrieben:Interfaces machen in Python, als eine Typfreie Spache, einfachen keinen Sinn.
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:
Oder?
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()
...
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.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
@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.
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.
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.Masaru hat geschrieben:Gut, sagen wir dann besser Typvereinbarungsfreie Sprachen .
*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 ...".
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 ...".
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Für alle die es dennoch kompliziert mögen, gibt es zope.interface.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice