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

tiptopppest