Attribute der Superklasse lesen

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
SElsner
User
Beiträge: 15
Registriert: Dienstag 22. Juli 2008, 14:24

Dienstag 22. Juli 2008, 14:33

Hallo liebes forum,

ich habe eine Frage zur OOP in Python, die eigentlich gar nicht so schwer sein sollte, ich aber noch nie beantworten habe müssen.
Es gibt eine Klasse voxel, welche die klasse Vector3D (vec3) aus dem Python Computer Graphics Kit erweitert. Nun möchte ich die __str__ überschreiben, dabei aber sowohl die drei Koordinaten der vec3 klasse, als auch die self.color meiner klasse ausgeben lassen. Wie greife ich nun auf die Attribute der vec3 zu?

Klar kann ich vx,vy,vz nochmal als self.vx usw. speichern, das muss doch aber nicht sein, oder???

Code: Alles auswählen

class voxel (vec3):

    def __init__(self,vx,vy,vz):
        vec3.__init__(self,vx,vy,vz)
        self.color=(255,255,255)

    def __str__(self):
        ##wie kann ich hier auf die x,y,z koordinate der vec klasse zugreifen?
        pass

Vielen Dank für die Hilfe

Sebastian
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dienstag 22. Juli 2008, 14:39

Ich denke was du willst ist `super()'
super(type[, object-or-type])
Return the superclass of type. If the second argument is omitted the super object returned is unbound. If the second argument is an object, isinstance(obj, type) must be true. If the second argument is a type, issubclass(type2, type) must be true. super() only works for new-style classes.

A typical use for calling a cooperative superclass method is:

class C(B):
def meth(self, arg):
super(C, self).meth(arg)

Note that super is implemented as part of the binding process for explicit dotted attribute lookups such as "super(C, self).__getitem__(name)". Accordingly, super is undefined for implicit lookups using statements or operators such as "super(C, self)[name]". New in version 2.2.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 22. Juli 2008, 14:55

Oder einfach auf ``vec3`` zugreifen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
SElsner
User
Beiträge: 15
Registriert: Dienstag 22. Juli 2008, 14:24

Dienstag 22. Juli 2008, 15:17

Danke für die Antworten. :D Hier die Lösungszeile:

return vec3.__str__(self)

Es funktioniert natürlich beides, auf Leonidas' Antwort bin ich auch selbst gekommen, nur hats bei mir nicht funktioniert, weil ich das "self" in der Klammer vergessen hab :oops:

Gruß

Sebastian
Antworten