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