OOP Schreibstil?

Fragen zu Tkinter.
Antworten
ShoxX
User
Beiträge: 24
Registriert: Sonntag 15. April 2012, 22:33

Hallo

Ich habe nun 2 Schreibstile gesehen einmal diesen:

Code: Alles auswählen

from Tkinter import *

class App:
    
    def __init__(self, master):
        
        self.label = Label(master, text="Hallo Welt")
        self.label.pack()
        
#Hauptprogramm

root = Tk()

app = App(root)

root.mainloop()
Und einmal diesen:

Code: Alles auswählen

#Schreibstil-2

from Tkinter import *

class App:
    
    def __init__(self):
        
        master = Tk()
        
        self.label = Label(master, text="Hallo Welt")
        self.label.pack()
        
        master.mainloop()
        
#Hauptprogramm

app = App()
Trotz das ich Anfänger bin sehe ich das beide sich nicht unterscheiden,
für Dritte wäre aber der erste Stil besser, weil Sie direkt sehen es gibt eine Konstruktor,
aber nur deshalb den ersten Stil wählen?

Und warum erbt App nicht von object ich dachte alle Klassen erben von object,
ist das bei einer GUI anders?
BlackJack

@ShoxX: Die unterscheiden sich schon. Beim ersten kannst Du auch etwas anderes als das `Tk`-Exemplar als `master` übergeben, zum Beispiel könnte man mehrere solcher `App`\s in einem Programm erstellen und denen `Toplevel`-Exemplare übergeben. Beim zweiten kannst Du im Grunde nichts mit dem `App`-Exemplar anstellen, weil der Konstruktur erst zurück kehrt, wenn die Hauptschleife von Tk beendet wurde.

Wenn `App` tatsächlich nur aus der `__init__()` besteht, egal welcher Stil, sollte man es weg lassen, denn dann macht die Klasse keinen Sinn.

Das erbt nicht von `object` weil es nicht explizit hingeschrieben wurde. Sollte man eigentlich machen. Denn ohne ist es keine „new style”-Klasse und es geht nicht alles damit was modernes Python bietet. Zum Beispiel `property()` funktioniert damit nicht richtig. Immer explizit von `object` zu erben sollte man sich eigentlich am besten gleich angewöhnen. Ab Python 3 erben alle Klassen implizit von `object`, aber man darf es auch dort weiterhin auch hinschreiben.
ShoxX
User
Beiträge: 24
Registriert: Sonntag 15. April 2012, 22:33

Wollte die Beispiele klein halten darum sind keine Methoden vorhanden.

Okay das mit dem object ist wie du schon schreibst was neues habe eben bemerkt dass das:
http://home.foni.net/~heikos/tkinter/
Tutorial sehr veraltet ist,
zahlreiche Sachen die der Autor zeigt funktionieren nicht mehr,
wenn ich das richtig sehe arbeitet der mit Python 0.6 oder so,
dann kein Wunder das der auf das object verzichtet,
das aber der Autor vom Video2Brain auch drauf verzichtet regt mich jetzt echt auf :evil:,
erst im OOP Teil sagen "jede Klasse erbt von object und ab Python 3 müssen sogar alle Klassen von object erben" und dann im GUI Teil,
GUIs bauen ohne object,
ich glaube dem ist gar nicht bewusst wieviel Verwirrung der damit stiftet :evil:

Wenn ich eins wirklich gelernt habe, dann traue keinen Python Autor denn jedes Video jedes Buch und jedes Tutorial vermittelt dir nur Quatsch :mrgreen: (Nicht ganz ERNST gemeint)

Aber gut das mir so manche Sachen selber auffallen und ich nachfragen kann,
so lerne ich es zumindest richtig :D

Danke BlackJack
Könntest du deine Erklärung ein bisschen besser erklären damit ich das verstehe,
denn das klinkt ja interessant,
also wäre der zweite Ansatz ja sehr schlechter Stil den der Autor vom Video2Brain vermittelt,
verstehe das nur nicht ganz was du mit deiner Erklärung zu dem ersten Stil meinst :?
Zuletzt geändert von ShoxX am Donnerstag 10. Mai 2012, 20:41, insgesamt 1-mal geändert.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Das Dokument hat die Version 0.6, das benutzte Python dürfte irgendwas von 1.0 aufwärts sein. Ich denke das sollte dir demonstrieren, dass du dich besser auf aktuelle Tutorials (auf Englisch) + die Dokumentationen verlassen solltest wenn du es ordentlich erlernen willst ohne über solche Probleme zu stolpern.
ShoxX
User
Beiträge: 24
Registriert: Sonntag 15. April 2012, 22:33

Unterscheidet sich Tkinter mit Python 1 stark von Tkinter mit Python 2.5?

Ich habe schon gesehen das viele Event Händler nicht mehr gehen und mit der Methode keys() gesehen das viele Optionsnamen gar nicht mehr so heißen oder sogar nicht mehr vorhanden sind oder neue hinzu kamen :?
Antworten