Seite 1 von 1
GELÖST : Auf Variablen anderer Klassen zugreifen
Verfasst: Freitag 4. November 2005, 09:02
von Gunnar
Welche Möglichkeiten gibt es auf die Variablen anderer Klassen zuzugreifen ?
Ist es auf dem Weg der Vererbung am einfachsten und "pythonischsten" ? Also sprich eine Basisklasse mit z.B. einer Liste erzeugen und alle anderen Klassen von ihr erben lassen ?
Danke für den Hint,
Gunnar
Verfasst: Freitag 4. November 2005, 09:18
von Masaru
Hm, also in Python kannst du ganz einfach z.B. über den Klassen-Namen auf das Attribut oder die Methode zugreifen.
Es ist nicht erforderlich, ein Objekt zu instanzieren, und darüber das Attribut anzusteuern.
Am einfachsten geht dass, indem du deine Klassen (auf die du zugreifen möchtest) in Module auslagerst, und die <Modulname>.<Klassenname> importierst.
Dann kannst du auf die Attribute und Methoden der Klasse zugreifen.
Einfaches Bsp:
Code: Alles auswählen
# folgendes Modul ist ausgedacht!
import tools.StringTools as strTools
text = strTools.sample_string
# sample_string könnte z.B: eben ein Attribut der Klasse StringTools sein
strTools.convert_string_to_list(text)
# Zugriff auf die Methode 'convert_string_to_list der Klasse strTools
>>Masaru<<
Verfasst: Freitag 4. November 2005, 10:02
von Gunnar
Ach entschuldigt, ich meinte etwas in der Richtung:
Wie kann ich Daten zwischen Klassen fliessen lassen ?
z.B. in einer Klasse wird x + y = z errechnet. Die Variablen x und y kommen von einer zweiten Klasse und in einer dritte soll das ganze ausgegeben werden.
Gunnar
Verfasst: Freitag 4. November 2005, 10:32
von Masaru
*grübel*
Wie wär's mit Objektinstanzierung aus den Klassen, und dann direkt mit den Objekt-Attributen (Variablen, Methoden) operieren?
Code: Alles auswählen
Class WerteContainer(object):
def __init__(self, x, y):
self.x = x
self.y = y
Class BerechnungMethoden(object):
def __init__(self):
pass
def a_plus_b(self, a, b):
ergebnis = a + b
return ergebnis
Class Ausgabe(object):
def __init__(self):
pass
def print_inhalt(self, inhalt):
print inhalt
>>> # Istanzierung der Objekte
>>> werte = WerteContainer(8, 7)
>>> rechner = BerechnungMethoden()
>>> ausgabe = Ausgabe()
>>>
>>> ausgabe.print_inhalt( rechner.a_plus_b(werte.x, werte.y) ) )
15
Meinst du sowas?
*g* ansonsten stehe ich voll auf dem Schlauch.
Verfasst: Freitag 4. November 2005, 10:32
von mitsuhiko
Code: Alles auswählen
>>> class Spam:
def __init__(self, value):
self.value = value
>>> class Eggs:
def __init__(self):
pass
def check(self, cls):
return cls.value
>>> spam = Spam("spam and eggs")
>>> eggs = Eggs()
>>> eggs.check(spam)
'spam and eggs'
Sowas?
Verfasst: Freitag 4. November 2005, 10:51
von Gunnar
Vielen dank ihr Beiden...genau sowas

Verfasst: Freitag 4. November 2005, 16:40
von BlackJack
Klassen sind dazu da um Daten und Funktionen in einem Objekt zusammen zu fassen. Wenn die Daten x und y zusammen gehören und Deine Operation z.B. x+y eine typische Operation auf diesen Daten ist, dann gehört die Methode auch in die Klasse wo x und y Attribute sind.
Verfasst: Freitag 4. November 2005, 18:46
von Gunnar
Ja, aber was ist wenn du z.B. TKinter nimmst? Irgendwo müssen da ja die Schnittstellen sein.
(Usereingabe(TK)) > (Verarbeitung(Selfmade)) > (Ausgabe(TK))
Was schlägst du dort vor?
Gruß,
Gunnar
Verfasst: Freitag 4. November 2005, 18:53
von Joghurt
EVA-Prinzip: E/A durch Tk. V durch deine Klassen.
Also Tk-Callback lies Daten, ruft deine Klasse auf und übergibt das Ergebnis wieder an Tk.
Verfasst: Freitag 4. November 2005, 20:11
von Gunnar
Alles klar, TK-Callback war das Stichwort...damit komme ich auf jeden Fall weiter.
Danke
