variable von anderen klassen

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
brennsuppa
User
Beiträge: 13
Registriert: Dienstag 2. Februar 2010, 13:11

Ist es möglich auf die Variablen in anderen Klassen über setter/getter oder property zuzugreifen?
wie müsste ich folgendes Programm erweitern damit das geht oder träume ich da vom warmen Eis?

Code: Alles auswählen

class A(object):
   def __init__(self, id = None):
        self.id       = id
   def do(self);
        pseudocode: wenn A.self.id gleich B.self.id
        print "Geht das?" 

class B(object):
   def __init__(self, id = None):
        self.id       = id
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Was ist denn dein eigentliches Problem?

Code: Alles auswählen

def change_b(b):
    b.x = 10

class B:
    def __init__(self, x):
         self.x = x

b = B(5)
print b.x
change_b(b)
print b.x
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@brennsuppa: Da weder `A` noch `B` ein Attribut mit dem Namen `self` haben geht das nicht. Was willst Du denn machen? In Worten, denn aus dem Beispiel wird das IMHO nicht verständlich. Was willst Du in `do()` mit den *Klassen*?
brennsuppa
User
Beiträge: 13
Registriert: Dienstag 2. Februar 2010, 13:11

Naja, in do() möcht ich die id's aller klassen (wenn vorhanden) auf ein File schreiben!
Allerdings kann ich wenn das do() in Klasse A ist, wie ich es brauche, nicht auf die id von B zugreifen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

`id` ist aber kein Klassenattribut, sondern ein Instanzattribut. Entweder du verzichtest auf `self` und meinst wirklich Klassenattribute, oder du sammelst die Exemplare in `__init__` mit "weak references" und arbeitest darauf.
brennsuppa
User
Beiträge: 13
Registriert: Dienstag 2. Februar 2010, 13:11

der Ursprung-Code ist nicht von mir und sieht halt so aus...

was ich also draus lerne: so wirds einfach nicht gehen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nicht direkt nein, aber du koenntest deine A, B Exemplare an anderer Stelle erzeugen und dort die Daten sammeln, z.b. in Subklassen.
brennsuppa
User
Beiträge: 13
Registriert: Dienstag 2. Februar 2010, 13:11

@cofi: dass meine beiden Beispielklassen sämtliche Variablen erben?
das wär dann aber ein größerer umbau ;)

ich habe ca. 7 klassen mit je 20 variablen, auf denen zuerst einige Berechnungen durchgeführt werden und im Anschluss in einer Funktion 'alle' ausgegeben werden sollten.
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

Hallo brennsuppa,
du könntest auch die Instanzen der jeweiligen Berechnungsklassen als Parameter deiner do()-Methode übergeben.

Code: Alles auswählen

>>> class WORK:
... 	def __init__(self, wert):
... 		self.ergebnis = wert*2
... 
>>> class OUTPUT:
... 	def do(self, inis):
... 		for instanz in inis:
... 			print instanz.ergebnis
... 
>>> ini_list = [WORK(1),WORK(2),WORK(3)]
>>> b = OUTPUT()
>>> b.do(ini_list)
2
4
6
>>> 
Somit hast du direkten Zugriff auf die jeweiligen Instanzattribute.
brennsuppa
User
Beiträge: 13
Registriert: Dienstag 2. Februar 2010, 13:11

danke, das geht :D
tiptopppest
Antworten