Seite 1 von 1

Übergabe von Werte und Zeiger auf Objekte

Verfasst: Dienstag 19. Mai 2009, 12:01
von feldmaus
Hi Alle,

ich verstehe nicht wie die Übergabe von Werten oder Zeiger auf Objekte
von Klasse zu Klasse von statten geht.

Ich habe eine Klasse instanziert, in der eine weitere Klasse instanziert wird.
In der 'oberen' Klasse habe ich ein array.array erstellt, dass ich gerne
übergeben würde an die 'untere' Klasse.

Wie macht man das ?

Hier mein Programm Schnippsel:

Code: Alles auswählen

import wx
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
import pickle
import time
from numpy import *
import array

class HistoApp(wx.App):
    def OnInit(self):
        f_daten = file('../../../peakdaten.dat','r')
        starttime, endtime, samp_rate = pickle.load(f_daten)
        f_daten.close()
        wx.EVT_CLOSE(self, self.OnQuit)
        timescale, nitems = self.gettimescale(starttime, endtime)
        f_peaks_1 = file('../../../peakdetektor1.hex','rb')
        f_peaks_2 = file('../../../peakdetektor2.hex','rb')
        f_peaks_3 = file('../../../peakdetektor3.hex','rb')
        f_peakvalue_1 = file('../../../peakband1.hex','rb')
        f_peakvalue_2 = file('../../../peakband2.hex','rb')
        f_peakvalue_3 = file('../../../peakband3.hex','rb')
        a_p_1 = array.array('b')
        a_p_2 = array.array('b')
        a_p_3 = array.array('b')
        a_pv_1 = array.array('f')
        a_pv_2 = array.array('f')
        a_pv_3 = array.array('f')
        self.frame = HistoFrame(parent=None,\
                               title='Histogramm einer Mehrfrequenten Impulsmessung',\
                               size=(640, 480))

. . .
class HistoFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.Bind(wx.EVT_MENU, self.onQuit, id=105)
        self.makeMenu()
        self.graphWindow = GraphWindow(self)

. . .
class GraphWindow(wx.Window):
    def __init__(self, *args, **kwargs):
        wx.Window.__init__(self, *args, **kwargs)
        self.lines = []

. . .
if __name__ == '__main__':
    app = HistoApp(0)
    app.MainLoop()

Grüße Markus

Verfasst: Dienstag 19. Mai 2009, 12:22
von EyDu
Als Parameter der __init__-Methode:

Code: Alles auswählen

class HistoApp(wx.App):
    def OnInit(self):
        ....
        self.frame = HistoFrame(the_array, parent=None,
                               title='Histogramm einer Mehrfrequenten Impulsmessung',
                               size=(640, 480))
class HistoFrame(wx.Frame):
    def __init__(self, an_array, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.an_array = an_array
Gewöhne dir am besten auch die *-Import ab.
Wenn du Variablen durchnummerierst, dann möchtest du wahrscheinlich ein Tupel oder eine Liste.
Dateien solltest du mit "open" öffen und nicht mit "file", zum Zusammensetzen von Pfaden gibt es "os.path.join". Fehlerbehandlung solltest du auch noch durchführen.
Die Backslashes (?) beim Erzeugen von "self.frame" sind überflüssig.
Außerdem sollte deine "OnInit"-Methde nach PEP8 besser "on_init" heißen.

Bis dann,
Sebastian

Verfasst: Dienstag 19. Mai 2009, 12:50
von feldmaus
EyDu hat geschrieben:Als Parameter der __init__-Methode:

Code: Alles auswählen

class HistoApp(wx.App):
    def OnInit(self):
        ....
        self.frame = HistoFrame(the_array, parent=None,
                               title='Histogramm einer Mehrfrequenten Impulsmessung',
                               size=(640, 480))
class HistoFrame(wx.Frame):
    def __init__(self, an_array, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.an_array = an_array
Wird denn eine Kopie oder ein Zeiger auf mein Array übergeben ?

Grüße und Danke für die Antwort Markus

Verfasst: Dienstag 19. Mai 2009, 12:57
von EyDu
In Python werde IMMER nur Referenzen übergeben, außer du erzeugst explizit eine Kopie.