Seite 1 von 1

Anfängerfrage class, self!

Verfasst: Mittwoch 27. Mai 2009, 20:26
von Nyrk
Hallo,

ich habe z.B. folgenden Code:

Code: Alles auswählen

class Window:
	def __init__(self):
		self.xml = gtk.glade.XML(os.path.join(os.path.dirname(sys.argv[0]), 'foo.glade'))
		self.window = self.xml.get_widget('window1')
		#...
		self.window.show()
was ich dabei jetzt nicht verstehe ist class window, def __init__(self): und self.....

wenn ich das alles weglasse funktioniert es ja trotzdem...
kann mir das mal jemand vernünftig erklären?

Verfasst: Mittwoch 27. Mai 2009, 20:31
von derdon
Du solltest mit GUI erst anfangen, wenn du verstanden hast wie OOP in Python funktioniert und wie man eigene Klassen erstellt: http://docs.python.org/tutorial/classes.html

Verfasst: Mittwoch 27. Mai 2009, 22:57
von scrippi
Klassen werden zur Übersichtlichkeit und wiederverwendbarkeit genuzt.

Wenn du uns also nen 100 Zeiliges programm in Prozeduraler schreibweise, wenig kommentaren zeigst, wird sich kaum einer dazu motiviern den Code durchzublicken zu wollen.

Ausserdem kannst du nutzung von OOP klassen in klassen vererben. In GUI Programmierung brauchst du das ganz oft, zB.: für das Threading(wenn du mehrere fenster offen haben willst die aber alle eigenständig aufgaben bewältigen)

Du solltest dir auf jeden fall ein gutes Tutorial auffinden in dem du alles von funktionen, methoden bis hin zu Klassen einlesen kannst

Aber bezüglich deiner Frage:

du hast eine Klasse mit einem Konstruktor, einer Methode die sofort aufgerufen wird, sobald du die Klasse startest, definiert.

Beispiel:

Code: Alles auswählen

class Test:
    def __init__(self):
        print "ich wurde erstellt"

c = Test()
durch die untere Zeile hast du automatisch die funktion __init__ausgeführt und da kannst du variablen der klasse definieren. Auch diese sehr strukturierte verteilung ist für GUI notwendig, sonst haste irgendwann mal "sehr viel spaß" beim debuggen.

Hoffe dir reicht das als antwort, dass du nicht denkst das hier "lies tutorials" ne standard antwort ist ;)

lg scrippi

Re: Anfängerfrage class, self!

Verfasst: Donnerstag 28. Mai 2009, 07:55
von Darii
Nyrk hat geschrieben:wenn ich das alles weglasse funktioniert es ja trotzdem...
kann mir das mal jemand vernünftig erklären?
Ich vermute Mal du meinst:

Code: Alles auswählen

class Window:
	xml = gtk.glade.XML(os.path.join(os.path.dirname(sys.argv[0]), 'foo.glade'))
	window = self.xml.get_widget('window1')
		#...
	window.show()
Nun sobald ein Modul geladen (=die entsprechende Python-Datei ausgeführt) wird, und der Interpreter zu einer Klassendefinition kommt wird der Code innerhalb der Klassendefinition ausgeführt und die Namen an das Klassenobjekt gebunden. Das heißt dein Fenster wird schon erstellt sobald der Interpreter zu der Klasse kommt und nicht erst wenn du Window() aufrufst. Klassenvariable heißt, dass alle Instanzen dier Klassen diese sehen, so lange sie nicht bei der Instanz selbst überschrieben werden.

Code: Alles auswählen

class A:
    print "Hallo"
    foo = []
    def __init__(self):
        print "Bin da"
# Hallo wurde ausgegeben weil allen innerhalb der Klassendef
# ausgeführt wurde
a1 = A() # "Bin da"
a2 = A() # "Bin da"
a1.foo.append(1) # Verändern von foo
print a2.foo # In jeder Instanz sichtbar
a1.foo = [] # Überschreiben von foo in a1
print a2.foo # immer noch [1]

Verfasst: Donnerstag 28. Mai 2009, 18:02
von Nyrk
Vielen dank, ich hatte mir dazu auch schon 2 open books angeschaut, leider aber im einzelnen nicht 100%ig verstanden.

Jetzt weiß ich so ungefähr wieso und weshalb ich Klassen nutzen sollte.

Gruß

Nyrk

Verfasst: Donnerstag 28. Mai 2009, 18:03
von derdon
Aber hoffentlich nicht das von Galileo Computing :wink:

Verfasst: Donnerstag 28. Mai 2009, 18:04
von Nyrk
doch Das :-) und a byte of python!

Verfasst: Donnerstag 28. Mai 2009, 18:06
von derdon
Dann solltest das Kapitel über OOP übersprigen und dieses Thema lieber woanders lernen (z.B. Original-Tut).