python inheritance subclass python-2.5

Subclassing int en Python



inheritance python-2.5 (2)

Aunque es correcto, las respuestas actuales posiblemente no estén completas.

p.ej

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

Mostraría b como un entero, donde es posible que desee que sea una TestClass.

Aquí hay una respuesta mejorada

class positive(int): def __new__(cls, value, *args, **kwargs): if value < 0: raise ValueError, "positive types must not be less than zero" return super(positive, 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))

Ahora el mismo tipo de prueba

a = positive(10) b = a - 9 print type(b)

imprimiría ''positivo''

Estoy interesado en crear una subclase del tipo de int integrado en Python (estoy usando v. 2.5), pero tengo algunos problemas para que la inicialización funcione.

Aquí hay un código de ejemplo, que debería ser bastante obvio.

class TestClass(int): def __init__(self): int.__init__(self, 5)

Sin embargo, cuando trato de usar esto obtengo:

>>> a = TestClass() >>> a 0

donde esperaría que el resultado fuera 5 .

¿Qué estoy haciendo mal? Hasta ahora, Google no ha sido de mucha ayuda, pero no estoy seguro de qué debería buscar.


int es inmutable, por lo que no puede modificarlo después de haberlo creado, use __new__ en __new__ lugar

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