Angle 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
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Hi zusammen,

Ich möchte eine eigene Klasse proggen, die Winkel representiert. Das sollte etwa so ausschauen:

Code: Alles auswählen

class Winkel(float):
    def __init__(self, value):
        float.__init__(self, value)
Dann möchte ich, dass, wenn ich auf dieses Objekt zugreife, es reagiert wie ein float. Ich könnte also tippen:

x = Angle(256)
x += 360 -> Der Winkel wird neu ausgerechnet (weil grösser 360)
x -> der neue Winkel wird ausgegeben
x.cos -> property von Angle; gibt den Cosinus zurück

Das mit den Properties ist mir inzwischen klar, aber wie mache ich, dass wenn ich auf ein Angle Objekt zugreife, automatisch der float dazu zurückgegeben wird? Das verstehe ich nicht ganz...

Oder bin ich partout auf dem falschen Wege wenn ich versuche eine Subklasse von float zu proggen für eine eigene Winkel Klasse? Ich möchte ja nicht, dass ich auf den Winkelwert irgendwie zugreifen muss à la angle.angle oder was auch immer; wenn ich auf das Objekt zugreife, soll es den Winkel selbst repräsentieren (einen float).

Irgendwo hab ich da nen Knopf... kann jemand helfen? Ich würde diese Angle Klasse dann in mein my_math Modul integrieren; das kann ich immer wieder brauchen glaub ich.

Cheers,


Henry
Ich code, also bin ich.
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

@Henry Jones Jr.: von Basistypen abzuleiten ist immer schwierig. Jede Funktion, die Floats verarbeitet, wird ein Float-Objekt zurückliefen, und kein Angle-Objekt. Selbst bei x+=1 wird aus dem Angle-Objekt wieder ein float-Object. Du müßtest also wirklich alle Operatoren überladen. Irgendwo wirst Du aber wieder Probleme bekommen, weil eine Funktion floats erwartet aber was anderes bekommt. Welchen Vorteil hätte denn ein Angle-Object überhaupt?
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Danke für die Antwort erst mal Sirius3.

Wofür ich das bräuchte wär z.Bsp. ein Fadenkreuz-Object in einem "Worms"-like Game. Der Soldat hat ein Fadenkreuz, das man mit nach-oben / nach-unten "drehen" kann - es ist 2D das Ganze; man kann zielen, indem man den Zielwinkel verändert und so wird dann das Fadenkreuz verschoben anhand des Winkels. Das schaut so aus im Moment:

Bild

Nun wenn immer ich den Winkel anpasse (winkel += 10 oder was auch immer), muss ich ihn anschliessend wieder "korrigieren". Dafür habe ich eine 'get_angle' Methode gebastelt, die den Winkel dann wieder umrechnet so dass 0 <= winkel < 360. Das ist ja schon toll; aber NOCH schöner wär eben eine Angle Klasse wie oben, die das "automatisch" macht und dann auch eben mit cos, sin properties und allem, was so praktisch is mit Winkeln :)

Aber Du wirst schon Recht haben - ich lass das mal sein dann und verwende weiter meine bisherige Methode.

Danke!
Ich code, also bin ich.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Warum *musst* du den Winkel anschließend wieder korrigieren? Es ist bei Berechnungen doch vollkommen egal ob du 10°, 370° oder -350° hast.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Don Polettone
User
Beiträge: 115
Registriert: Dienstag 23. November 2010, 20:26
Wohnort: Schweiz

Warum *musst* du den Winkel anschließend wieder korrigieren? Es ist bei Berechnungen doch vollkommen egal ob du 10°, 370° oder -350° hast.
?? Echt? Denke ich mal wieder zu weit..?
Ich code, also bin ich.
Antworten