Seite 1 von 1

variable von anderen klassen

Verfasst: Mittwoch 14. April 2010, 18:42
von brennsuppa
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

Verfasst: Mittwoch 14. April 2010, 18:51
von jbs
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

Verfasst: Mittwoch 14. April 2010, 19:22
von 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*?

Verfasst: Freitag 16. April 2010, 08:55
von brennsuppa
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.

Verfasst: Freitag 16. April 2010, 09:05
von cofi
`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.

Verfasst: Freitag 16. April 2010, 09:15
von brennsuppa
der Ursprung-Code ist nicht von mir und sieht halt so aus...

was ich also draus lerne: so wirds einfach nicht gehen?

Verfasst: Freitag 16. April 2010, 09:21
von cofi
Nicht direkt nein, aber du koenntest deine A, B Exemplare an anderer Stelle erzeugen und dort die Daten sammeln, z.b. in Subklassen.

Verfasst: Freitag 16. April 2010, 09:49
von brennsuppa
@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.

Verfasst: Freitag 16. April 2010, 13:47
von dahaze
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.

Verfasst: Mittwoch 21. April 2010, 13:34
von brennsuppa
danke, das geht :D
tiptopppest