Seite 1 von 1
klassen unter python
Verfasst: Dienstag 3. Juni 2008, 11:16
von The Hit-Man
ich habe mir eine klasse geschrieben, die sich tools nennt. in meinem hauptformular erstelle ich natürlich eine kopie von ihr, um sie benutzen und zwar mit
im hauptformular kann ich natürlich alles nutzen, methoden anspringen, eigenschaften ändern. jetzt brauche ich aber genau die gleiche kopie, von der klasse, in einem anderen formular, da ich von dem anderen fenster, eigenschaften der klasse ändern muß.
jemand ne ahnung, wie man das macht?
Verfasst: Dienstag 3. Juni 2008, 11:21
von jens
Du übergibst die Instanz, also mTools an die richtige Stelle?
Verfasst: Dienstag 3. Juni 2008, 11:24
von The Hit-Man
ich übergebe nichts. habe mein hauptformular, in dem ich eine instanz von meiner tool klasse mache, die ich im hauptformular auch nutzen kann. ich habe im konstruktor einige flags, die ich mit einem anderen fenster setzten muß und auch dort die methoden anspringen muß. das ist aber momentan im anderen fenster nicht möglich, da die instanz ja vom hauptformular gemacht worden ist. ich könnte eine neue instanz im anderen formular anlegen, aber es wäre ja nicht die selbe.
wie meinst du das mit "instanz übergeben" ????
Verfasst: Dienstag 3. Juni 2008, 11:28
von jens
Du sprichst hier von Fenster. Meinst du damit GUI Fenster? Welches Toolkit?
Mit mTools = Tools() Erstellst du ja eine Instanz von Tools und bindest die an den Namen mTools... Und dieses mTools Objekt musst du an die Stelle übergeben wo du drauf zugreifen möchtest...
Verfasst: Dienstag 3. Juni 2008, 11:33
von The Hit-Man
ich nutze die wx widgets und rufe vom hauptfenster ein anderes fenster auf. das soll zum konfigurieren, der anwendung sein. und von dem konfigurations-fenster, möchte ich gerne auf die mTools zugreifen.
EDIT:
oder gibts es ne methode, die klasse also, die instanz einfach global zu machen? muß ja eh viel von außen drauf zu greifen. dort sind ja meine ganzen tools drin, die ich für mein programm brauche.
Verfasst: Dienstag 3. Juni 2008, 15:25
von The Hit-Man
hmmm, ich versuche mal nen anderes beispiel. nehm wir einfach 2 wxwidgets fenster ( sind ja auch klassen ) und ich möchte von dem einem zum anderen fenster, zum beispiel textfelder und so weiter ändern. wie komme ich also an die fensterklasse ran?
Verfasst: Dienstag 3. Juni 2008, 16:13
von gerold
The Hit-Man hat geschrieben:nehm wir einfach 2 wxwidgets fenster ( sind ja auch klassen ) und ich möchte von dem einem zum anderen fenster, zum beispiel textfelder und so weiter ändern. wie komme ich also an die fensterklasse ran?
Hallo The Hit-Man!
Es ist nicht fair, einfach alles klein zu schreiben. Das erschwert das Lesen deiner Beiträge für mich erheblich. Ich wollte es schon lassen und dir nicht antworten.
Und jetzt zur Frage. Vielleicht bringen dich diese Beispiele auf Ideen:
-
http://www.python-forum.de/post-78061.html#78061
-
http://www.python-forum.de/post-81531.html#81531
-
http://www.python-forum.de/post-65622.html#65622
mfg
Gerold

Verfasst: Dienstag 3. Juni 2008, 20:43
von The Hit-Man
Es ist nicht fair, einfach alles klein zu schreiben. Das erschwert das Lesen deiner Beiträge für mich erheblich. Ich wollte es schon lassen und dir nicht antworten.
Ja, tut mir leid. Ich weiß, ist ne kleine Schwäche von mir. Bin recht faul geworden, mit der Zeit. Schreibe im Netz eigelich immer klein, hat sich bei mir so eingebürgert. Ich tippe des weiteren immer ziemlich schnell und die Shift-Taste stört meist ein wenig. Bitte um Entschuldigung, werde versuchen das zu ändern.
Verfasst: Donnerstag 5. Juni 2008, 08:27
von The Hit-Man
ähm, ich habe nen neuen Ansatz. Hatte gestern mit nem Freund gequatscht, der C++ Freak ist. Er meinte, ich muß diese Klasseninstanz einfach der neuen Klasse mitgeben, die ich auchrufe, mit Parametern. Bin irgendwie nen bischen verwirrt, gerade.
Verfasst: Donnerstag 5. Juni 2008, 09:11
von BlackJack
Das ist kein neuer Ansatz, sondern das was jens und Gerold schon vorgeschlagen haben. Und Dein Freund hat recht, trotz dem er in C++ programmiert.

Verfasst: Donnerstag 5. Juni 2008, 09:41
von The Hit-Man
jub, ich mag ja eigentlich Klassen, aber hatte zu Anfangs echt Probleme gehabt, diese überhaupt zu verstehen, obwohl sie ja eigentlich total logisch sind. Hatte mal unter VisualFoxPro programmiert. Das geht zwar schnell mal eben ne Klasse zusammen zu klicken, allerdings weiß man dann nie genau, wie und wo diese Klasse dann auch arbeitet. Erst jetzt, wo ich selber Klassen schreibe, lerne ich dazu. Werde jetzt genau das mal mit kleinen Scripten ausprobieren. Denn es ist nen riesen Aufwand, wenn man auch seine Klasse, die man überall braucht nicht zugreifen kann. Man programmiert ja alles doppelt und dreifach. Der Code wird total unübersichtlich dadurch. Je mehr ich an meinem Projekt programmiere, desto mehr fällt mir auf, was ich alles einfacher hätte machen können. Doch ich denke, das ist bei einem Anfänger, wie mir, eher normal. Was habe ich damals das Programmieren in Assembler auf dem C64er geliebt. Da gabs ja keine Klassen

Verfasst: Donnerstag 5. Juni 2008, 09:52
von jens
Hier mal ein dummes Beispiel was ich meinte:
Code: Alles auswählen
# -*- coding: utf-8 -*-
class GlobalObjects(object):
"""
Hierdran hängen wir alle globalen Objekte, die man so braucht.
Die objects werden überall mit hin geschleppt.
"""
pass
class Printer(object):
def zeigmal(self, txt):
print "zeigmal:", txt
class Logger(object):
def log(self, txt):
print "log:", txt
def sub_sub_routine(objects):
objects.log.log("blabla")
objects.printer.zeigmal("jup")
def sub_routine(objects):
objects.printer.zeigmal("wow1")
sub_sub_routine(objects)
def mein_programm():
# Erstelle mein Objekt, welches überall mit hin kommt.
objects = GlobalObjects()
# Packe alle Dinge dran, die ich brauchen kann
objects.printer = Printer()
objects.log = Logger()
sub_routine(objects)
mein_programm()
Wobei das ein wenig die Sicht ist, wie ich es in PyLucid also in der WebProgrammierung mache...
Wenn man nichts mit Threads zu tun hat, kann man auch was im Modul Level machen. Dann muß man nicht ein Objekt die ganze Zeit überall hin mit schleppen, sondern kann es einfach importieren...
Verfasst: Donnerstag 5. Juni 2008, 13:30
von The Hit-Man
aha, danke, ich denke ich habe es verstanden

Ist eigentlich recht einfach, wenn man es einmal richtig erklärt bekommt

. Allerdings hatte ich es mit meinem Programm jetzt anders gelöst, auch wenn mir nen Freund wieder sagt, das es unschön wäre. Mein Programm ist aber nicht sooooo groß, das es unübersichtlich wirkt.
Ich hatte nämlich bei wxglade gesehen, das ich beide Fenster in eine Datei packen kann. wenn ich dann ganz oben meine ToolsKlasse instanziere, kann ich sie von beiden Fenstern aus ansprechen. Genau so, wollte ich es auch gehabt haben

Wenn man natürlich mehere Fenster, sprich mehere Dateien, Klassen hat, würde ich es wohl so machen, wie Du in Deinem Beispiel gerade.
Verfasst: Donnerstag 5. Juni 2008, 13:49
von jens
The Hit-Man hat geschrieben:Ich hatte nämlich bei wxglade gesehen, das ich beide Fenster in eine Datei packen kann. wenn ich dann ganz oben meine ToolsKlasse instanziere, kann ich sie von beiden Fenstern aus ansprechen.
Das meinte ich mit, global machen auf Modul Ebene. Du kannst in Python immer mehrere Klassen in ein Modul stopfen. Wenn es zu unübersichtlich ist, kannst du es trennen, dennoch per
from ... import ... wieder das Objekt "herreinholen".