GELÖST : Auf Variablen anderer Klassen 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.
Antworten
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Freitag 4. November 2005, 09:02

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
Zuletzt geändert von Gunnar am Freitag 4. November 2005, 10:51, insgesamt 1-mal geändert.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Freitag 4. November 2005, 09:18

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<<
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Freitag 4. November 2005, 10:02

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.

:oops:

Gunnar
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Freitag 4. November 2005, 10:32

*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.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 4. November 2005, 10:32

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?
TUFKAB – the user formerly known as blackbird
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Freitag 4. November 2005, 10:51

Vielen dank ihr Beiden...genau sowas ;)
BlackJack

Freitag 4. November 2005, 16:40

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.
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Freitag 4. November 2005, 18:46

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
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Freitag 4. November 2005, 18:53

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.
Benutzeravatar
Gunnar
User
Beiträge: 68
Registriert: Samstag 23. Oktober 2004, 08:59

Freitag 4. November 2005, 20:11

Alles klar, TK-Callback war das Stichwort...damit komme ich auf jeden Fall weiter.

Danke :)
Antworten