The Python __div__() magic method overrides the division operation for a custom object in Python 2.
In Python 3, it was replaced by the __truediv__() for a / b and __floordiv__() dunder methods for a // b.
- The Python
__truediv__()method is called to implement the normal division operation/called true division. For example to evaluate the expressionx / y, Python attempts to callx.__truediv__(y). - The Python
__floordiv__()method implements the integer division operation//called floor division. For example to evaluate the expressionx // y, Python attempts to callx.__floordiv__(y).
If the method is not implemented, Python first attempts to call __rtruediv__ or __rfloordiv__ on the right operand and if this isnβt implemented either, it raises a TypeError.
TypeError: unsupported operand type(s) for /
In the following example, you try to override the division operator on the custom object Data by using the __div__() magic method.
# Python 3 - WRONG:
class Data:
def __div__(self, other):
return 42.42
x = Data()
y = Data()
print(x / y)
However, this doesn’t work for Python 3—you obtain the following output error message:
Traceback (most recent call last):
File "C:\Users\xcent\Desktop\code.py", line 9, in <module>
print(x / y)
TypeError: unsupported operand type(s) for /: 'Data' and 'Data'To fix this issue, override the __truediv__() magic method for Python 3 instead of the __div__() magic method for Python 2 to define the true division operator x / y.
You can see how it’s done in the following code example (see highlighted lines):
class Data:
def __truediv__(self, other):
return 42.42
x = Data()
y = Data()
print(x / y)
# 42.42Explainer Video Division Operators
You can also check out my explainer video where Iβll give you a deep dive on the integer and true division operators and how to use them for various data types. Click to watch: