Emulación de tipos numéricos en Python

Las siguientes son las funciones que se pueden definir para emular objetos de tipo numérico. 

Métodos para implementar operaciones binarias en el mismo tipo de objetos:

Estas funciones no harán ningún cambio en el objeto que llama, sino que devolverán un nuevo objeto numérico del mismo tipo después de realizar cierta operación en el objeto que llama. Los siguientes son los métodos para implementar operaciones binarias aritméticas.

Método Operación
objeto.__add__(yo, otro) + (suma)
objeto.__sub__(yo, otro) (Sustracción)
objeto.__mul__(uno mismo, otro) * (Multiplicación)
objeto.__matmul__(uno mismo, otro) @ (Multiplicación de arrays)
objeto.__truediv__(uno mismo, otro) / (División verdadera)
objeto.__pisodiv__(uno mismo, otro) // (División de piso)
objeto.__mod__(uno mismo, otro) % (Módulo o resto)
objeto.__divmod__(uno mismo, otro) divmod()
objeto.__pow__(self, otro[, modulo]) ** (poder)
objeto.__lshift__(yo, otro) << (desplazamiento a la izquierda bit a bit)
objeto.__rshift__(yo, otro) >> (desplazamiento a la derecha bit a bit)
objeto.__y__(yo, otro) & (Operación AND bit a bit)
objeto.__xor__(yo, otro) ^ (Operación OR exclusiva)
objeto.__o__(yo, otro) | (Operación bit a bit)

El __pow__() está definido para aceptar un tercer argumento opcional para admitir la versión ternaria de la función pow(). Además, si alguno de los métodos anteriores no es compatible con la operación, debería devolver NotImplemented .

Métodos para implementar operaciones binarias en diferentes tipos de objetos:

Si el tipo de objeto a la izquierda (objeto colable) es diferente, se pueden usar los siguientes métodos para realizar operaciones binarias aritméticas :

Método Operación
objeto.__radd__(uno mismo, otro) + (suma)
objeto.__rsub__(uno mismo, otro) (Sustracción)
objeto.__rmul__(uno mismo, otro) * (Multiplicación)
objeto.__rmatmul__(uno mismo, otro) @ (Multiplicación de arrays)
objeto.__rtruediv__(uno mismo, otro) / (División verdadera)
objeto.__rfloordiv__(uno mismo, otro) // (División de piso)
objeto.__rmod__(uno mismo, otro) % (Módulo o resto)
objeto.__rdivmod__(uno mismo, otro) divmod()
objeto.__rpow__(self, otro[, modulo]) ** ( pow( ) o potencia de número)
objeto.__rlshift__(yo, otro) << (desplazamiento a la izquierda bit a bit)
objeto.__rrshift__(yo, otro) >> (desplazamiento a la derecha bit a bit)
objeto.__rand__(yo, otro) & (Operación AND bit a bit)
objeto.__rxor__(yo, otro) ^ (Operación OR exclusiva)
objeto.__ror__(yo, otro) | (Operación bit a bit)

Por ejemplo, si en a.__sub__(b), a no es de tipo numérico a partir de b, entonces este método devolverá NotImplemented, luego para realizar a – b llamaremos a.__rsub__(b).

Métodos para implementar operaciones de asignación aritmética:

Estos métodos se utilizan para implementar las operaciones de asignación aritmética . No devolverán un nuevo objeto, sino que asignarán el nuevo valor al llamar al objeto en sí. Al igual que x.__imul__(y) se realizará como x = x * y . A continuación se muestran las operaciones correspondientes a cada método.

Método Operación
objeto.__iadd__(yo, otro) += (asignación de suma)
objeto.__isub__(yo, otro) -= (asignación de resta)
objeto.__imul__(uno mismo, otro) *= (Asignación de multiplicación)
objeto.__imatmul__(yo, otro) @= (Asignación de multiplicación de arrays)
objeto.__itruediv__(uno mismo, otro) /= (Asignación de división verdadera)
objeto.__ifloordiv__(yo, otro) //= (asignación de división de piso)
objeto.__imod__(yo, otro) %= (Asignación de módulo o resto)
objeto.__ipow__(self, otro[, modulo]) **= ( asignación de potencia de número )
objeto.__ilshift__(yo, otro) <<= (asignación de desplazamiento a la izquierda bit a bit)
objeto.__irshift__(yo, otro) >>= (asignación de desplazamiento a la derecha bit a bit)
objeto.__iand__(yo, otro) &= (asignación de operación AND bit a bit)
objeto.__ixor__(yo, otro)  ^= (Asignación de operación OR exclusiva)
objeto.__ior__(yo, otro) |= (Asignación de operación OR bit a bit)

Métodos para implementar operaciones aritméticas unarias:

Los siguientes son los métodos para implementar operaciones aritméticas unarias como, negativo de un número, inverso de un número, etc.

Método Operación
objeto.__neg__(uno mismo) (menos unario)
objeto.__pos__(uno mismo) + (más unario)
objeto.__abs__(uno mismo) función incorporada abs()
objeto.__invertir__(uno mismo) ~ (complemento de un número)

Algunos otros métodos importantes:

Método Descripción
objeto.__índice__(uno mismo)

Llamado para implementar la función operator.index() , también se usa para convertir un objeto de tipo numérico a tipo entero,  

o podemos decir si __int__(), __float__() o __complex__() no están definidos entonces int(), float() y complex() caen 

bajo __index__().

object.__round__(self, ndigits)

Para implementar la función round() , el segundo argumento opcional indica hasta cuántos lugares decimales 

queremos redondear el valor numérico.

objeto.__trunc__(uno mismo) Para implementar la función trunc().
objeto.__piso__(uno mismo) Para implementar la función floor().
objeto.__ceil__(yo) Para implementar la función ceil().

Publicación traducida automáticamente

Artículo escrito por amit_mangal_ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *