auf eine Klasse öfter zugreifen

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.
kanti
User
Beiträge: 5
Registriert: Dienstag 7. August 2007, 07:04
Wohnort: Magdeburg

auf eine Klasse öfter zugreifen

Beitragvon kanti » Dienstag 7. August 2007, 07:29

Hallo Forum,

ich bin noch Anfänger in Python.
Nun mein Problem:

Code: Alles auswählen

class Main(wx.Frame,allgemein.globals):
   
    #---------------------------------------------------------------------------
    #die __init__-Methode initiert alle Elemente und Daten
    def __init__(self, parent):
       
        #erstellen des Hauptframes
        wx.Frame.__init__(self, parent = parent, id = -1, title = 'Main', size = (810,680))
       
       
        #herstellen einer Verbindung zum Datenbank-Server
        allgemein.globals.__init__(self,'mathiaskant')
...


Code: Alles auswählen

import pymssql

#---------------------------------------------------------------------------
#Klasse "Server"
class globals(object):
   
    #"connect"-Methode um sich mit dem Server zu verbinden
    def __init__(self,username):
        self.username = username
        self.con = pymssql.connect( ****)
        self.cur = self.con.cursor()


im ersten Codeteil greife ich auf die Klasse globals zu. (DB-Zugriff)
Jetzt möchte ich in einer anderen Klasse auch Zugriff auf die KLasse globals haben, aber ohne sie nochmal zu initialisieren.
Das heißt sie soll die ganze Zeit zugriffbar sein.

Ich hoffe ihr habt verstanden worauf ich hinaus will.

Danke

Mathias
BlackJack

Beitragvon BlackJack » Dienstag 7. August 2007, 08:49

Wieviele Objekte von `allgemein.globals` existieren denn üblicherweise in Deinem Programm? Wenn die Antwort 1 ist, dann solltest Du aus der Klasse ein Modul machen. Und bitte nicht alles mit Mehrfachvererbung so "zusammenmatschen".
kanti
User
Beiträge: 5
Registriert: Dienstag 7. August 2007, 07:04
Wohnort: Magdeburg

Beitragvon kanti » Dienstag 7. August 2007, 10:10

momentan sieht die allgemeine Klasse so aus:

Code: Alles auswählen

import pymssql

#---------------------------------------------------------------------------
#Klasse "Server"
class globals(object):
   
    #"connect"-Methode um sich mit dem Server zu verbinden
    def __init__(self,username):
        self.username=username
        #nutzer = nutzer
       
       
   
    def DB (self):
        self.con = pymssql.connect( ****** )
        self.cur = self.con.cursor()


und die erste Initialisierung so:

Code: Alles auswählen

allgemein.globals.__init__(self,'mathiaskant')
allgemein.globals.username='mathiaskant'
allgemein.globals.DB(self)


den username kann ich jetzt auch schon in allen Klassen jetzt aufrufen.

Ich würde jetzt aber gerne nicht in jeder Klasse die DB connecten.
Sie sollte eigentlich die ganze Zeit auf sein.

Mathias
BlackJack

Beitragvon BlackJack » Dienstag 7. August 2007, 10:32

Da geht aber einiges durcheinander. Die drei Zeilen Initialisierung sehen nicht so aus, als wenn Du Klassen verstanden hättest.

Wie gesagt, mach aus dem Code für die Verbindung ein Modul. Module sind im Grunde Singletons und genau so etwas scheinst Du zu brauchen.

Und versuch Namenskonventionen einzuhalten. Klassennamen schreibt man per Konvention in CamelCase und Attribute, also auch Methoden, in kleinen_buchstaben_mit_unterstrichen.
kanti
User
Beiträge: 5
Registriert: Dienstag 7. August 2007, 07:04
Wohnort: Magdeburg

Beitragvon kanti » Dienstag 7. August 2007, 10:59

wie gesagt, ich bin Anfänger.
Wie meinst du das? Hast du ein Beispiel dafür?

Danke

Mathias
BlackJack

Beitragvon BlackJack » Dienstag 7. August 2007, 15:24

Naja halt ganz einfach ein Modul mit den benötigten Funktionen, also mindestens eine die beim ersten Aufruf die Verbindung zur Datenbank herstellt und bei weiteren diese Verbindung zurückgibt.

Das Modul kann man dann von überall importieren und diese Funktion aufrufen.

Eine andere Möglichkeit wäre es die Datenbankverbindung in einer Klasse zu kapseln von der einmal ein Objekt erstellt wird, und das dann immer als Argument herum zu reichen.

Kommt darauf an, wie aufwändig das wäre.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder