KLassen und Vererbung

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
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
alpha
User
Beiträge: 195
Registriert: Freitag 23. Mai 2003, 23:24
Wohnort: Ulm

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
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Dazu kannst Du auch das Borg-Pattern verwenden:

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

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten