Observe the following code:
class Angle(int):
"""Basic Angle object: Angle(number)"""
def __init__(self, angle):
angle %= 360
super(Angle, self).__init__(angle)
Fairly simple stuff, Angle
is basically just an int
that never goes above 360 or below 0. This __init__
just makes sure that the input angle matches the conditions listed prior. But for some reason the above code gives me the following output:
>>> a = Angle(322)
>>> a
322
>>> b = Angle(488)
>>> b
488
Why on earth would this be happening? The code seemed so trivial to me, but maybe I'm just missing something really obvious.
You should be overriding __new__
for immutable classes like int
class Angle(int):
def __new__(cls, val):
val %= 360
inst = super(Angle, cls).__new__(cls, val)
return inst
see python datamodel for more info
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With