Dictionary innerhalb einer Klasse

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
ratna_fong
User
Beiträge: 38
Registriert: Samstag 3. Juli 2010, 10:43

Hallo zusammen :wink:

ich bin mir nicht sicher, ob dies ein Dictionary innerhalb der Klasse ist:

Code: Alles auswählen

class MeineKlasse(object):
  format = {
    'ratna' : (('deutschland',0),),
    'fong' : (('spanien',0), ('uruguay',0), ('holland',0))
    }
Ich frage mich, wofür in diesem Fall ein Dictionary ist. Kann mir einer vielleicht erklären? Ich versuche gerade, einen Code zu nachvollziehen. Und es kommt halt so eine Klasse vor. Um genauer zu sein, wird diese Klasse sogar noch als Basisklasse einer anderen Klasse verwendet. Gibt es irgendwelche Auswirkungen wenn man Objekte der Unterklasse erzeugt zum Beispiel. Danke Euch..

Eure Ratna
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Testen:

Code: Alles auswählen

>>> class MeineKlasse(object):
...   format = {
...     'ratna' : (('deutschland',0),),
...     'fong' : (('spanien',0), ('uruguay',0), ('holland',0))
...     }
... 
>>> class C2(MeineKlasse):
...     pass
... 
>>> C2.format
{'fong': (('spanien', 0), ('uruguay', 0), ('holland', 0)), 'ratna': (('deutschland', 0),)}
>>> MeineKlasse.format
{'fong': (('spanien', 0), ('uruguay', 0), ('holland', 0)), 'ratna': (('deutschland', 0),)}
`format` ist dabei ein Klassenattribut. Bei Exemplaren der Klasse aendert sich nichts, die uebernehmen direkt das Klassenattribut (es sei denn es wird ueberschrieben).
Warum es ein Dictionary ist? Weil es wohl Sinn macht eines zu verwenden, mehr kann ich dir da nicht sagen, da du ja ein Spielzeugbeispiel daraus gebastelt hast. Wenn du damit das Klassenattribut meintest: Das macht u.a. Sinn, wenn man Klassenspezifische Konstanten erzeugen will.
ratna_fong
User
Beiträge: 38
Registriert: Samstag 3. Juli 2010, 10:43

danke cofi, :o

könntest Du vielleicht erklären, was du mit klassenspezifischen Konstanten ? Meinst Du damit vielleicht die Spezifikation der Klasse?
Ich habe den Code ja eigentlich davor liegend, es sieht so aus, dass aus diesen Attributen so eine Art Spalten zu eu tiner Tabelle gebildet werden.
Hat das vielleicht damit zu tun?

Danke Dir,

Ratna :oops:
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo Ratna,

deine Frage ist sehr schwer zu beantworten, weil wir ja keinen vollständigen Code haben. Klassenvariablen können ja prinzipiell für alles mögliche stehen.
Der Unterschied zwischen einer Klassenvariable und einer Objektvariable lässt sich vielleicht ganz gut an folgendem Beispiel veranschaulichen:

Code: Alles auswählen

In [10]: class test(object):
    counter=0
    def __init__(self):
        test.counter += 1
        print(test.counter)
In [15]: x = test()
1
In [16]: y = test()
2
In [17]: z = test()
3
Objektvariablen hat jede Klasse für sich allein - wenn du 3 mal das gleiche Objekt instanzierst, haben zwar alle erstellten Objekte gleichnamige Objektvariablen (sog. Attribute) (etwa "self.name"), sie sind aber jeweils völlig unabhängig voneinander. Die erste Instanz der Klasse könnte den Namen "Bernd" haben, die zweite Instanz den Namen "Karl" und die dritte Instanz den Namen "Willi".

Wenn du aber Klassenvariablen nutzt, teilen sich alle Instanzen einer Klasse diese Variable. Im Beispiel oben siehst du, wie jede Instanz der Klasse den Zähler "test.counter" um 1 erhöht. Das wäre mit Objektvariablen nicht möglich, weil jedes Objekt einen unabhängigen Zähler hätte.

Wie gesagt: Das war jetzt nur die Langfassung dessen, was cofi schon angeschnitten hat. Für mehr Informationen brauchen wir auch mehr Code.

Besten Gruß,

brb
Zuletzt geändert von Barabbas am Freitag 9. Juli 2010, 11:49, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

ratna_fong hat geschrieben:könntest Du vielleicht erklären, was du mit klassenspezifischen Konstanten ? Meinst Du damit vielleicht die Spezifikation der Klasse?
Nein, einfach Konstanten, die zur Klasse gehoeren und deshalb in ihr angelegt werden. Da ist nichts magisches dabei, das heisst einfach nur, dass man zusammensteckt, was zusammengehoert.

Wenn es dir noch nicht klar ist, poste doch den relevanten Teil des echten Codes, dann kann man es anhand dessen zeigen.
ratna_fong
User
Beiträge: 38
Registriert: Samstag 3. Juli 2010, 10:43

vielen Dank für Eure Angebote,

ich darf leider den (Teil)-Code nicht veröffentlichen. Über PN ginge es vielleicht noch, aber ich möchte auch nicht allzu großartig stören. Ich bin froh wenn ich Tipps und kleine Erklärungen von Euch bekommen, dies führt mich früher oder später zum Verständnis. Ich mache ein Praktikum in einem Betrieb und ich interessiere mich für die Codes, die vorliegen.

Eine Frage. Wenn eine Klasse so aussieht:

class Unterklasse(Basisklasse1, Basisklasse2)

Also, mehrere Basisklassen. Heißt das lediglich, dass die Attribute und Methoden der jeweiligen Basisklassen automatisch geerbt werden? Mehr nicht? Bisland hab ich eigentlich nur mit EINER Basisklasse gekannt, deswegen macht micht das ein wenig stutzig wenn 2 Basisklassen sind.

Vielen Dank.

Eure Ratna
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Ja, das hast du richtig erfasst.
Das Fachwort ist "Mehrfachvererbung", s. auch http://de.wikipedia.org/wiki/Mehrfachvererbung
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Antworten