Übergabe von Werte und Zeiger auf Objekte

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
feldmaus
User
Beiträge: 287
Registriert: Donnerstag 12. Oktober 2006, 16:48

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
Zuletzt geändert von feldmaus am Mittwoch 20. Mai 2009, 06:03, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Das Leben ist wie ein Tennisball.
feldmaus
User
Beiträge: 287
Registriert: Donnerstag 12. Oktober 2006, 16:48

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

In Python werde IMMER nur Referenzen übergeben, außer du erzeugst explizit eine Kopie.
Das Leben ist wie ein Tennisball.
Antworten