Seite 1 von 2

Verfasst: Montag 13. Juni 2005, 16:41
von Leonidas
Erwin hat geschrieben::oops:
Naja, macht eigentlich nichts. Du hast mich öfters Edwin gennant.
Da habe ich eh noch was gut. ;)
Wo denn? *g* Ach, die Edit-Funktion ist schon praktisch :D
Erwin hat geschrieben:

Code: Alles auswählen

class Gut(object): 
    def __init__(self): 
        self.variable = False 
    def gut(self): 
        self.variable = True 
Achso? Das init wird auf False gesetzt?
Aber zugleich auch die Variable.
Welche dann bei def gut wieder auf True gesetzt wird?
Nein, da blicke ich (noch?) nicht durch.
__init__ wird beim Initialisieren der Klasse ausgeführt (siehe Gut()). Dort wird die Klasseninterne Variable variable auf False gesetzt. Die ist nun solange False, bis du gut() aufrufst.
Erwin hat geschrieben:Bei Classaufruf ... hm.. ist das eine dann zum löschen gedacht?
Nein, ich lösche hier nichts. Das überlasse ich dem Garbage Collector.
Erwin hat geschrieben:Hm.. aber innerhalb einer Funktion kann es eh aber nur die Lokalen Variablen verändern. Die Globalen nur, wenn ich diese innerhalb der Funktion global mache.
Wenn man gut strukturiert (Namentlich) vor geht, dürfte da nicht viel passieren, denk ich.
Die Globalen sind eben mit gutem Grund nur lesbar gemacht. Diesen habe ich dir erklärt aber wenn du unbedingt Funktionen mit Nebenwirkungen haben willst, ist das deine Entscheidung.

Verfasst: Montag 13. Juni 2005, 19:20
von Erwin
@ Leonidas

Da ich offen gestanden Probleme habe, das Sichere Konzept zu verstehen, was ich vom Leichtem nicht behaupten kann, macht es für mich bestimmt nicht viel Sinn das Sichere zu verwenden.
Und da reinarbeiten ... das ist mir zur Zeit ... zu verwirrend. Das dauert.

So lange beim Einfachem nur dann Fehler auftreten können, weil ich versehentlich auf Global zugreifen lass (also mit Namen vertan habe), sehe ich da kein wirkliches Problem.

Verfasst: Montag 13. Juni 2005, 19:38
von Leonidas
Erwin hat geschrieben:Da ich offen gestanden Probleme habe, das Sichere Konzept zu verstehen, was ich vom Leichtem nicht behaupten kann, macht es für mich bestimmt nicht viel Sinn das Sichere zu verwenden.
Und da reinarbeiten ... das ist mir zur Zeit ... zu verwirrend. Das dauert.
Klassen musst du so oder so früher oder später lernen, also von dem her..

Verfasst: Montag 13. Juni 2005, 19:51
von Erwin
Man macht also eine Klasse, die wiederum Variablen abfertigt?
Hört sich für mich umständlich an.
Da warte ich lieber, bis mal wirklich was los ist.

Verfasst: Montag 13. Juni 2005, 20:10
von Leonidas
Erwin hat geschrieben:Man macht also eine Klasse, die wiederum Variablen abfertigt?
Hört sich für mich umständlich an.
Am besten man schreibt gleich so, dass man globale Variablen vermeidet und fertig.

Verfasst: Montag 13. Juni 2005, 20:43
von Erwin
Achso?
Mit der Class-Methode gibt es gar keine Globalen Variablen mehr im Klassischem Sinne?
Aber dann kann man doch anderweitig von jedem lokalem Bereich aus auf die Variablen zugreifen, oder?
Der Sinn leuchtet mir nicht ein. Tut mir leid.

Verfasst: Montag 13. Juni 2005, 22:37
von BlackJack
Ich versuch's auch nochmal. Also `global` ist "schlecht" weil so Funktionen von Sachen ausserhalb ihrer Definition abhängig werden. Eine Funktion sollte nur Auswirkungen auf die Parameter haben, die man ihr übergibt und evt. einen Rückgabewert haben.

Wenn sich mehrere Funktionen so etwas wie eine "globale" Variable teilen müssen, oder alle diese als Parameter entgegennehmen, dann ist das ein gutes Zeichen dafür, dass man eine Klasse daraus machen sollte. Mit der "globalen" Variable als Instanz-Attribut und den Funktionen als Methoden.

Hattest Du nicht erwähnt, dass Du schon einmal etwas in Delphi programmiert hast? Das ist doch auch objektorientiert!?

Verfasst: Montag 13. Juni 2005, 23:29
von Erwin
BlackJack hat geschrieben:...
Hattest Du nicht erwähnt, dass Du schon einmal etwas in Delphi programmiert hast? Das ist doch auch objektorientiert!?
Das ist schon bald 3 Jahre her.
Funktionen habe ich dort nicht gemacht, sondern die Buttons (auf visible = False) dann zweckentfremdet. Und innerhalb dessen Ablauf konnte ich halt auf alle Globalen Varialblen zugreifen, so weit ich weiß.

Ich blicke bei dem Ganzen immer noch nicht durch.
Wenn ich mir eine Globale Variable zulege, denn eben damit auch die Funktionen darauf zugreifen können.
Sonst bräuchte es keine Globalen Variablen.
Und... ich weiß da einfach nicht, wieso ich daraus eine Classe machen soll, dessen Funktion ich weniger verstehe.
Natürlich, wenn ich wo einen Falschen Namen hernehme, dann kommt was durcheinander. Das passiert dann doch so oder so (?), egal ob ich falsche Variablen-Namen nehme, oder falsche Class-Variablen-Namen nehme?

Hm... der einzige Grund, der mir einfiehle, falls in einer Klasse oder Funktion, welche ich nicht selbst erstellt habe, eine Variable nicht richtig zugewiesen wurde, und ich verwende saudummerweise den gleichen Globalen Namen.
Aber sonst ... .

Verfasst: Dienstag 14. Juni 2005, 22:33
von BlackJack
Erwin hat geschrieben:
BlackJack hat geschrieben:...
Hattest Du nicht erwähnt, dass Du schon einmal etwas in Delphi programmiert hast? Das ist doch auch objektorientiert!?
Das ist schon bald 3 Jahre her.
Funktionen habe ich dort nicht gemacht, sondern die Buttons (auf visible = False) dann zweckentfremdet. Und innerhalb dessen Ablauf konnte ich halt auf alle Globalen Varialblen zugreifen, so weit ich weiß.
Delphi ist doch auch eine objektorientierte Sprache!? Wie kann man da ohne Funktionen/Methoden auskommen!?
Ich blicke bei dem Ganzen immer noch nicht durch.
Wenn ich mir eine Globale Variable zulege, denn eben damit auch die Funktionen darauf zugreifen können.
Sonst bräuchte es keine Globalen Variablen.
Man sollte aber keine globalen Variablen brauchen. Funktionen sollten unabhängig sein. Sonst bekommt man unübersichtlichen Quelltext bei dem Funktionen durch mehr zusammhängen als nur gegenseitige Aufrufe.

Dein Button-Verschieben aus einem anderen Beitrag kann man zum Beispiel nicht für zwei verschiedene Sätze von Buttons gleichzeitig verwenden, weil es nur eine globale Variable gibt, die den aktuellen Button angibt, der verschoben wird.
Und... ich weiß da einfach nicht, wieso ich daraus eine Classe machen soll, dessen Funktion ich weniger verstehe.
Mit Klassen und deren Funktionsweise solltest Du Dich bei Python wirklich besser vertraut machen. Python ist eine durch und durch objektorientierte Sprache. Im Grunde ist alles in Python ein Objekt.

Während man in vielen einfachen Skripten noch um Klassen drumherum kommt, ist das Verständnis dafür bei grafischen Oberflächen sehr wichtig um zu verstehen, wie die GUI also z.B. Tkinter funktioniert.

Von Alan Gauld gibt's einen ganz guten Text zum lernen von Programmieren allgemein inklusive Objektorientierung und ereignisbasiertem Programmieren (GUIs), der unter anderem auf Python als Beispielsprache setzt und der auch in einer deutschen Übersetzung vorliegt. Man kann den ganzen Text als ZIP-Archiv heunterladen (auf der linken Seite fast ganz unten).

Verfasst: Dienstag 14. Juni 2005, 23:42
von Erwin
BlackJack hat geschrieben:...
Delphi ist doch auch eine objektorientierte Sprache!? Wie kann man da ohne Funktionen/Methoden auskommen!?
In dem man eben Buttons-Events zweckentfremdet.
Das Buch, was ich dazu laß, hatte die Funktion-Deklarierung dermaßen schlecht erklärt, daß ich einfach nicht dahinter kam.
Also mußten eben unsichtbare Buttons als Fuktionen bei mir herhalten.
BlackJack hat geschrieben:...
Man sollte aber keine globalen Variablen brauchen. Funktionen sollten unabhängig sein. Sonst bekommt man unübersichtlichen Quelltext bei dem Funktionen durch mehr zusammhängen als nur gegenseitige Aufrufe.

Dein Button-Verschieben aus einem anderen Beitrag kann man zum Beispiel nicht für zwei verschiedene Sätze von Buttons gleichzeitig verwenden, weil es nur eine globale Variable gibt, die den aktuellen Button angibt, der verschoben wird.
Unter Global verstehe ich nun mal, daß man auch innerhalb einer Funktion darauf zugreifen kann. Ob dies Class ist oder eine globale Variable ... .

Wieso sollte man alle Buttons aufsammeln?
Diese Möglichkeit hatte ich nicht im Sinn.
Ob es mit der Class-Variable einfach zu machen ist, weiß ich nicht. Kann es nämlich Gedanklich nicht nachvollziehen.
Aber mit Global ... wüßte da schon eine Möglichkeit. Mittels Directory.
BlackJack hat geschrieben:
Und... ich weiß da einfach nicht, wieso ich daraus eine Classe machen soll, dessen Funktion ich weniger verstehe.
Mit Klassen und deren Funktionsweise solltest Du Dich bei Python wirklich besser vertraut machen. Python ist eine durch und durch objektorientierte Sprache. Im Grunde ist alles in Python ein Objekt.
...
Bin froh, das ich problemlos die einfachen Funktonserstellungen verstehe.
Mit Vererbung ... geht gerade noch.
Classe ist schon recht schwer für mich zu verstehen.
Aber bei der Variablen-Classe ... ich vestehe da weder die Vererbung, noch deren Funktion (der Classe). Da wird also was reingelegt? Aber wie ruft man es auf? Und geht es überall? Muß ich in der Funktion die Variable dann anders aufrufen? Und was hat es sich mit init = False auf sich? Und das mit dem True? Dazwischen liegen für mich Welten, wann man es mit: 'x = 0' oder 'x ='0'', vergleicht.

Verfasst: Mittwoch 15. Juni 2005, 08:24
von ND
Danke für eure Beiträge. Da hab cih wohl eine schöne Diskussion mit den Variablen angeregt.

Ich ahb mir folgendes überlegt, das Bild mit den Endungen zu überprüfen wäre viel zu lang, da es einfahc zu viele Bildtypen geht.
Ich möchte einfach gucken ob der x,y oder z Wert des Bildes = 0 und damit kein Bild darstellt.
wie kann ich das denn am besten machen?
i

Verfasst: Mittwoch 15. Juni 2005, 13:02
von Leonidas
BlackJack hat geschrieben:Im Grunde ist alles in Python ein Objekt.
Das sagt auch noch eine Python sehr ähnliche Sprache, deren Namen ich nicht nennen werde ;)
Erwin hat geschrieben:Bin froh, das ich problemlos die einfachen Funktonserstellungen verstehe.
Mit Vererbung ... geht gerade noch.
Classe ist schon recht schwer für mich zu verstehen.
Funktionen haben keine Vererbung, das haben nur Klassen, und das macht auch nur bei Klassen Sinn.