wieder mal oop

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

Mittwoch 30. März 2005, 22:32

hi
Edit: hast du nur Fenster von object erben lassen?
ja, ich habe es wie in deinem bsp umgesetzt, HauptFenster erbt da auch nicht von object

gruß

rolgal
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 30. März 2005, 23:41

Naja, ist ja nicht so wichtig. Ich kannst gegebenfalls selbst noch versuchen, aber das ist ja kein Beinbruch.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Mittwoch 6. April 2005, 18:00

hi leonidas,

mir ist noch ne möglichkeit eingefallen....

also, statt im konstruktor von Fenster einen

Code: Alles auswählen

      raise NotImplementedError("Abstract class")
zu setzen, könnte man doch eine art umleitung machen:

Code: Alles auswählen

    def __init__(self,host,user,db,db_table,passwd='')
        self=HauptFenster(host,user,db,db_table,passwd='')
wird von Fenster fälschlicherweise, die ja nur als abstrakte klasse dienen soll, eine instanz aufgerufen, folgt ein aufruf von HauptFenster.

die sache mit Fenster.prepare() bleibt natürlich.

was haltest davon?

oder verstosse ich wieder mal unwissentlich :oops: gegen alle möglichen gesetze der programmierung.

kommentare von anderen sind natürlich auch immer erwünscht, eh klar.

mfg

rolgal
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 7. April 2005, 14:26

Aber das macht doch keinen Sinn, wenn beispielsweise die Klasse RundesObjekt beim Aufruf eine Instanz der Klasse Ball zurückgibt. Das macht doch keinen sinn, wenn eine allgemeine Klasse ein Objekt einer speziellen Klasse ausgibt. Davon abgesehen, denke ich nicht, dass eine "Elternklasse" davon ausgehen kann dass es "Kinderklassen" gibt/geben wird.

Edit: Ich hab es so gemacht, als ich What's On Air schrieb (Programm zum herausfinden des aktuellen Liedes, Anm. d. Red): eine Klasse StationBase gemacht, die paar Sachen definiert (eine mehr oder weniger einheitliche API), aber sonst keine Beschränkungen aufsetzt, also kann man von ihr Instanzen bilden (macht halt nur null Sinn). Dann habe ich für die einzelnen Sender Klassen, die StationBase erweitern. So einfach ist das. Ich hatte keine Lust groß Restriktionen einzuführen, das wäre vielleicht mehr objektorientiert, aber weniger pythonic gewesen (und etwas Verantwortung darf der Programmierer ruhig haben).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Donnerstag 7. April 2005, 20:50

Ich finde auch man sollte nicht versuchen den Programmierer zwanghaft von jedem Fehler abzuhalten. Wenn dokumentiert ist, dass die Klasse nur als Rahmen für Unterklassen Sinn macht, dann reicht das.

Und man sollte bei Python nicht vergessen, dass es durchaus möglich ist eine Instanz so einer "sinnlosen" Klasse zu erstellen und dieser dann dynamisch noch den nötigen Code zur Laufzeit zu verpassen!

Das mit dem Zwang, also 'private', 'protected', 'public' usw. hat übrigens nichts mit Objektorientierung zu tun. Also ist das Programm ohne den Zwang nicht weniger objektorientiert aber mehr "pythonic". Ein reiner Gewinn also. :-)
Gast

Donnerstag 7. April 2005, 22:40

hi,...

@leonidas
Davon abgesehen, denke ich nicht, dass eine "Elternklasse" davon ausgehen kann dass es "Kinderklassen" gibt/geben wird.
wenn sie eine abstrakte klasse ist dann schon, weil das ja genau ihrem wesen entspricht.

für mich stand halt die überlegung im vordergrund, dass das programm auf jeden fall läuft, man könnte ja noch immer eine ausgabe in die konsole oder in ein logfile machen, dass man eigentlich HauptFenster aufrufen sollte.

@blackjack
Und man sollte bei Python nicht vergessen, dass es durchaus möglich ist eine Instanz so einer "sinnlosen" Klasse zu erstellen und dieser dann dynamisch noch den nötigen Code zur Laufzeit zu verpassen!
so eine ähnliche aussage von mir hat hier mal zu einer umfassenden diskussion geführt.

http://python.sandtner.org/viewtopic.p ... 9&start=0


mfg

rolgal[/url]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 8. April 2005, 11:43

BlackJack hat geschrieben:Ich finde auch man sollte nicht versuchen den Programmierer zwanghaft von jedem Fehler abzuhalten. Wenn dokumentiert ist, dass die Klasse nur als Rahmen für Unterklassen Sinn macht, dann reicht das.
Ist auch meine Meinung. Wie du weißt ist Python weniger restriktiv als viele andere Sprachen, es macht meiner Meinung nach wenig Sinn zu versuchen Python an Java anzugleichen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten