Seite 1 von 1

KLassen und Vererbung

Verfasst: Freitag 5. August 2005, 08:22
von alpha
Hallo zusammen,

vor dem Wochenende nochmal eine kleine Frage:

ich habe ein Klasse A und möchte und instanziere diese mehrmals.
Gibt es eine Möglichkeit in dieser Klasse einen Varaiblenwert zu
halten, der in allen Objekten gleich ist? D.h. Ich ändere den Wert
in einem Objekt und in allen anderen Instanzen ändert sich der Wert
auch. Wäre da die Ableitung von einer Basisklasse der einzige Weg?

Danke schon mal für eure Mühen.

alpha

Verfasst: Freitag 5. August 2005, 09:40
von Leonidas
Ich weiß nicht ob es dass ist was du suchst:

Code: Alles auswählen

In [8]: class A(object):
   ...:     var = 0
   ...:     def __init__(self):
   ...:         self.__class__.var += 1
   ...:

In [9]: A.var
Out[9]: 0

In [10]: a = A()

In [11]: A.var
Out[11]: 1

In [12]: b = A()

In [13]: A.var
Out[13]: 2

Verfasst: Freitag 5. August 2005, 09:43
von jens
Es geht über eine Pseudo-Klasse:

Code: Alles auswählen

class var:
    variable = "test1"

class A:
    def __init__( self, var_class ):
        self.var_class = var_class

    def set( self, value ):
        self.var_class.variable = value

    def print_var( self ):
        print self.var_class.variable


var_class = var

a1 = A( var_class )
a2 = A( var_class )

print var_class.variable
a1.print_var()
a2.print_var()

print "-"*30

a1.set( "test2" )

print var_class.variable
a1.print_var()
a2.print_var()

print "-"*30

a2.set( "test3" )

print var_class.variable
a1.print_var()
a2.print_var()
Ausgabe:

Code: Alles auswählen

test1
test1
test1
------------------------------
test2
test2
test2
------------------------------
test3
test3
test3

Verfasst: Freitag 5. August 2005, 09:58
von mawe
Hi!

Was haltet ihr davon?

Code: Alles auswählen

In [2]: class A:
   ...:     var = 0
   ...:     def set_var(self, value):
   ...:         self.__class__.var = value
   ...:

In [3]: a = A()

In [4]: a.var
Out[4]: 0

In [5]: a.set_var(4)

In [6]: a.var
Out[6]: 4

In [7]: b = A()

In [8]: b.var
Out[8]: 4

In [9]: b.set_var(7)

In [10]: b.var
Out[10]: 7

In [11]: a.var
Out[11]: 7
EDIT: Peinlich. Hab grad gesehen dass Leonidas ja fast genau das selbe gepostet hat. Sorry.

Gruß, mawe

Verfasst: Freitag 5. August 2005, 10:32
von alpha
Danke an alle,

@ mawe,
coole Lösung den Ausdruck __class__ kannte ich noch garnicht.
Das ist aber genau das was ich suche. Ne Klassenvariable die für
alle Instanzen gilt. So komm ich sogar über die Vererbung rum.

Einfach ein tolles Forum :P

alpha

Ich auch :oops:
Danke auch an Leonidas :D

Verfasst: Samstag 6. August 2005, 16:24
von fs111
Dazu kannst Du auch das Borg-Pattern verwenden:

http://aspn.activestate.com/ASPN/Cookbo ... cipe/66531

fs111

Verfasst: Samstag 6. August 2005, 16:40
von Leonidas
Ja, darüber bin ich auch heute über die Newsgroup gestolpert. Sieht tatsächlich sehr interessant aus, das ist eine hübsche Methode um Config-Module zu vermeiden, was ich als Lösung nicht besonders elegant finde.