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

KLassen und Vererbung

Beitragvon alpha » Freitag 5. August 2005, 08:22

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 5. August 2005, 09:40

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 Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Freitag 5. August 2005, 09:43

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

CMS in Python: http://www.pylucid.org
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])

Beitragvon mawe » Freitag 5. August 2005, 09:58

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

Beitragvon alpha » Freitag 5. August 2005, 10:32

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

Beitragvon fs111 » Samstag 6. August 2005, 16:24

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 6. August 2005, 16:40

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 Modvoice

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]