Emulating Numeric types in Python
Last Updated :
15 Jul, 2025
The following are the functions which can be defined to emulate numeric type objects.
Methods to implement Binary operations on same type of objects :
These functions will make no change in the calling object rather they will return a new numeric object of same type after performing certain operation on the calling object. Following are the methods to implement arithmetic binary operations.
Method | Operation |
object.__add__(self, other) | + (Addition) |
object.__sub__(self, other) | - (Subtraction) |
object.__mul__(self, other) | * (Multiplication) |
object.__matmul__(self, other) | @ (Matrix multiplication) |
object.__truediv__(self, other) | / (True division) |
object.__floordiv__(self, other) | // (Floor division) |
object.__mod__(self, other) | % (Modulus or remainder) |
object.__divmod__(self, other) | divmod() |
object.__pow__(self, other[, modulo]) | ** (power) |
object.__lshift__(self, other) | << (Bit wise left shift) |
object.__rshift__(self, other) | >> (Bit wise right shift) |
object.__and__(self, other) | & (Bit wise AND operation) |
object.__xor__(self, other) | ^ (Exclusive OR operation) |
object.__or__(self, other) | | (Bit wise OR operation) |
The __pow__() is defined to accept a third optional argument so as to support the ternary version of pow() function. Also if any of above method does not support the operation it should return NotImplemented .
Methods to implement Binary operations on different type of objects :
If type of object at left (callable object) is different than following methods can be used to perform arithmetic binary operations :
Method | Operation |
object.__radd__(self, other) | + (Addition) |
object.__rsub__(self, other) | - (Subtraction) |
object.__rmul__(self, other) | * (Multiplication) |
object.__rmatmul__(self, other) | @ (Matrix multiplication) |
object.__rtruediv__(self, other) | / (True division) |
object.__rfloordiv__(self, other) | // (Floor division) |
object.__rmod__(self, other) | % (Modulus or remainder) |
object.__rdivmod__(self, other) | divmod() |
object.__rpow__(self, other[, modulo]) | ** (pow() or power of number) |
object.__rlshift__(self, other) | << (Bit wise left shift) |
object.__rrshift__(self, other) | >> (Bit wise right shift) |
object.__rand__(self, other) | & (Bit wise AND operation) |
object.__rxor__(self, other) | ^ (Exclusive OR operation) |
object.__ror__(self, other) | | (Bit wise OR operation) |
For example, if in a.__sub__(b), a is not of numeric type as of b then this method will return NotImplemented, then to perform a - b we will call a.__rsub__(b).
Methods to implement arithmetic assignment operations :
These methods are used to implement the arithmetic assignment operations. They will not return a new object rather they will assign the new value in calling object itself. Like x.__imul__(y) will be performed as x = x * y. Following are the corresponding operations to each method.
Method | Operation |
object.__iadd__(self, other) | += (Addition assignment) |
object.__isub__(self, other) | -= (Subtraction assignment) |
object.__imul__(self, other) | *= (Multiplication assignment) |
object.__imatmul__(self, other) | @= (Matrix multiplication assignment) |
object.__itruediv__(self, other) | /= (True division assignment) |
object.__ifloordiv__(self, other) | //= (Floor division assignment) |
object.__imod__(self, other) | %= (Modulus or remainder assignment) |
object.__ipow__(self, other[, modulo]) | **= (power of number assignment) |
object.__ilshift__(self, other) | <<= (Bit wise left shift assignment) |
object.__irshift__(self, other) | >>= (Bit wise right shift assignment) |
object.__iand__(self, other) | &= (Bit wise AND operation assignment) |
object.__ixor__(self, other) | ^= (Exclusive OR operation assignment) |
object.__ior__(self, other) | |= (Bit wise OR operation assignment) |
Methods to implement unary arithmetic operations :
Following are the methods to implement unary arithmetic operations like, negative of a number, inverse of a number etc.
Method | Operation |
object.__neg__(self) | - (unary minus) |
object.__pos__(self) | + (unary plus) |
object.__abs__(self) | abs() in-built function |
object.__invert__(self) | ~ (complement of a number) |
Some other important methods :
Method | Description |
object.__index__(self) |
Called to implement operator.index() function, also used to convert a numeric type object to integer type,
or we can say if __int__(), __float__() or __complex__() is not defined then int(), float() and complex() falls
under __index__().
|
object.__round__(self, ndigits) |
To implement the round() function, the second optional argument tells up to how many decimal places
we want to round the numeric value.
|
object.__trunc__(self) | To implement trunc() function. |
object.__floor__(self) | To implement floor() function. |
object.__ceil__(self) | To implement ceil() function. |
Similar Reads
type() function in Python The type() function is mostly used for debugging purposes. Two different types of arguments can be passed to type() function, single and three arguments. If a single argument type(obj) is passed, it returns the type of the given object. If three argument types (object, bases, dict) are passed, it re
5 min read
type() function in Python The type() function is mostly used for debugging purposes. Two different types of arguments can be passed to type() function, single and three arguments. If a single argument type(obj) is passed, it returns the type of the given object. If three argument types (object, bases, dict) are passed, it re
5 min read
type() function in Python The type() function is mostly used for debugging purposes. Two different types of arguments can be passed to type() function, single and three arguments. If a single argument type(obj) is passed, it returns the type of the given object. If three argument types (object, bases, dict) are passed, it re
5 min read
Number System in Python The arithmetic value that is used for representing the quantity and used in making calculations is defined as NUMBERS. The writing system for denoting numbers logically using digits or symbols is defined as a Number system. Number System is a system that defines numbers in different ways to represen
6 min read
Float type and its methods in python A float (floating-point number) is a data type used to represent real numbers with a fractional component. It is commonly used to store decimal values and perform mathematical calculations that require precision.Characteristics of Float TypeFloats support decimal and exponential notation.They occupy
5 min read
Float type and its methods in python A float (floating-point number) is a data type used to represent real numbers with a fractional component. It is commonly used to store decimal values and perform mathematical calculations that require precision.Characteristics of Float TypeFloats support decimal and exponential notation.They occupy
5 min read