Objektorientierung und Vererbung mit mehreren Skripten

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.
AnyOne
User
Beiträge: 18
Registriert: Donnerstag 25. Oktober 2012, 15:57
Wohnort: Aschaffenburg

@/me: Danke für den Beispielcode, jetzt wird mir der Unterschied bewusst und das wird auch direkt geändert. Ich werde in Zukunft beim Programmieren von Python davon ausgehen, dass das Programm von Leuten verwendet wird, die nicht darin rumpfuschen ;)

@Siruis3: Das heißt also, wenn ich eine Klasse ableite und darin die "super" Funktion verwende, dann weiß der Interpreter direkt, dass damit die Elternklasse gemeint ist? Interessant das ich davon bisher leider nichts in der Literatur gefunden habe, scheint ja wirklich viel Käse auf dem Markt zu geben -.-

@BlackJack: Ich denke das trug wirklich zur Verwirrung bei! Ich wollte damit lediglich andeuten, dass diese Werte zu Beginn einmal vom Nutzer eingegeben werden sollen (es wird später noch eine GUI geben, welche das abfragt) und dann keine Veränderung in der Laufzeit mehr erfahren sollen. Deswegen - so lernte ich es eben im Studium mit C++ - wollte ich diese kapseln.

Ich danke euch allen nochmals sehr für eure Hilfsbereitschaft! Das ist wirklich ein tolles Forum! :D
BlackJack

Bevor man `super()` verwendet, sollte man es IMHO verstanden haben und welche Konsequenzen sich daraus ergeben: Python's Super is nifty, but you can't use it.

Ich bleibe bei einem einfachen ``Parent.__init__(A, B, C, D)`` und hatte bisher auch noch keinen Fall wo ich die ganze Komplexität von `super()` gebraucht hätte.
AnyOne
User
Beiträge: 18
Registriert: Donnerstag 25. Oktober 2012, 15:57
Wohnort: Aschaffenburg

BlackJack hat geschrieben:Bevor man `super()` verwendet, sollte man es IMHO verstanden haben und welche Konsequenzen sich daraus ergeben: Python's Super is nifty, but you can't use it.

Ich bleibe bei einem einfachen ``Parent.__init__(A, B, C, D)`` und hatte bisher auch noch keinen Fall wo ich die ganze Komplexität von `super()` gebraucht hätte.
Gut, so habe ich es bisher auch immer verwendet und werde dann wohl auch dabei bleiben. Ich möchte mir nicht noch mehr Probleme einfangen..
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@BlackJack: Raymond Hettinger findet super super.
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

@pillmuncher: Ja den Artikel kenne ich, bis zu dem hatte ich Hettinger mindestens für einen Halbgott gehalten. Die Idee bei allen Methoden immer auch **kwargs entgegen nehmen zu müssen und alle Methoden fortan nur noch mit Schlüsselwort-Argumenten aufrufen zu müssen, finde ich so alles andere als super. Bei der Adapterklasse habe ich mich dann gefragt ob er auf Drogen ist.
AnyOne
User
Beiträge: 18
Registriert: Donnerstag 25. Oktober 2012, 15:57
Wohnort: Aschaffenburg

Ich habe meine Skripte jetzt gemäß eurer Anweisungen und Hilfen umgestellt und es funktioniert wunderbar! Vielen Dank für die tollen Erklärungen, das hat mir wirklich weitergeholfen ;)

Eine kleine Frage zu den imports hätte ich noch. In der Art, wie man diese schreibt scheinen die Meinungen stark auseinander zu gehen. Ich importiere das Skript mit den Klassen jetzt wie folgt:

from Classes import ClassA, ClassB, ClassC

Ist das so konform?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AnyOne hat geschrieben:from Classes import ClassA, ClassB, ClassC

Ist das so konform?
Ich empfinde das nicht als unleserlich oder gar falsch.
AnyOne
User
Beiträge: 18
Registriert: Donnerstag 25. Oktober 2012, 15:57
Wohnort: Aschaffenburg

/me hat geschrieben:
AnyOne hat geschrieben:from Classes import ClassA, ClassB, ClassC

Ist das so konform?
Ich empfinde das nicht als unleserlich oder gar falsch.
Sprich also Ziel von Python ist es, möglichst gut und einfach lesbaren Code zu produzieren?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Also wenn das nicht einfach nur ein Beispiel ist, sondern wirklich so in deinem Code steht, ist Classes doch schon ein recht merkwürdiger Name für ein Modul. Es sollte schon etwas aussagen und "da sind Klassen drin" ist keine ausreichende Aussage. Versuche es inhaltlicher, Beispiele findest du in der Standardbibliothek (auch stdlib genannt): http://docs.python.org/2/library/.
AnyOne
User
Beiträge: 18
Registriert: Donnerstag 25. Oktober 2012, 15:57
Wohnort: Aschaffenburg

derdon hat geschrieben:Also wenn das nicht einfach nur ein Beispiel ist, sondern wirklich so in deinem Code steht, ist Classes doch schon ein recht merkwürdiger Name für ein Modul. Es sollte schon etwas aussagen und "da sind Klassen drin" ist keine ausreichende Aussage. Versuche es inhaltlicher, Beispiele findest du in der Standardbibliothek (auch stdlib genannt): http://docs.python.org/2/library/.
Das ist hier nur einfach ein Beispiel ;) In meinem Code ist die Namensgebung natürlich aussagekräftiger. Hier sollen lediglich der Sinn bzw. meine Gedanken vermittelt werden. Trotzdem danke für den Hinweis :)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

AnyOne hat geschrieben:Sprich also Ziel von Python ist es, möglichst gut und einfach lesbaren Code zu produzieren?
"Readability counts."

Hast du schon mal in der Python-Konsole import this eingetippt? Wenn nicht, dann hol es nach.

Ergänzend dazu findet man es in PEP-8 auch etwas formaler: Import in PEP-8.
AnyOne
User
Beiträge: 18
Registriert: Donnerstag 25. Oktober 2012, 15:57
Wohnort: Aschaffenburg

/me hat geschrieben:"Readability counts."

Hast du schon mal in der Python-Konsole import this eingetippt? Wenn nicht, dann hol es nach.

Ergänzend dazu findet man es in PEP-8 auch etwas formaler: Import in PEP-8.
Danke, wurde direkt nachgeholt :)
BlackJack

Wobei das mit der Lesbarkeit nicht auf Python beschränkt ist. Das sollte eigentlich immer das Ziel vom Programmierer sein, unabhängig von der Programmiersprache. Code Golf und Obfuscation-Wettbewerbe mal ausgenommen. :-)
Antworten