Seite 1 von 1

Attribute der Superklasse lesen

Verfasst: Dienstag 22. Juli 2008, 14:33
von SElsner
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

Verfasst: Dienstag 22. Juli 2008, 14:39
von cofi
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.

Verfasst: Dienstag 22. Juli 2008, 14:55
von Leonidas
Oder einfach auf ``vec3`` zugreifen.

Verfasst: Dienstag 22. Juli 2008, 15:17
von SElsner
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