Subclassing int in Python Subclassing int in Python python python

Subclassing int in Python


int is immutable so you can't modify it after it is created, use __new__ instead

class TestClass(int):    def __new__(cls, *args, **kwargs):        return  super(TestClass, cls).__new__(cls, 5)print TestClass()


Though correct the current answers are potentially not complete.

e.g.

a = TestClass()b = a - 5print type(b)

Would show b as an integer, where you might want it to be a TestClass.

Here is an improved answer

class positive(int):    def __new__(cls, value, *args, **kwargs):        if value < 0:            raise ValueError("positive types must not be less than zero")        return  super(cls, cls).__new__(cls, value)    def __add__(self, other):        res = super(positive, self).__add__(other)        return self.__class__(max(res, 0))    def __sub__(self, other):        res = super(positive, self).__sub__(other)        return self.__class__(max(res, 0))    def __mul__(self, other):        res = super(positive, self).__mul__(other)        return self.__class__(max(res, 0))    def __div__(self, other):        res = super(positive, self).__div__(other)        return self.__class__(max(res, 0))    def __str__(self):        return "%d" % int(self)    def __repr__(self):        return "positive(%d)" % int(self)

Now the same sort of test

>>> a = positive(10)>>> b = a - 9>>> print(type(b))<class '__main__.positive'>

UPDATE:
Added repr and str examples so that the new class prints itself properly. Also changed to Python 3 syntax, even though OP used Python 2, to maintain relevancy.