Calling an operator in python is equivalent to calling a special method (except for the identity operator ``++is++``). Python provides a set of built-in operations. It is for example possible to add two integers: ``++1 + 2++``. It is however not possible to add a string and an integer: ``++1 + "2"++`` and such an operation will raise a ``++TypeError++``.
It is possible to define how an operator will behave with a custom class by defining the corresponding special method. See python documentation for a complete list of operators and their methods: {link-with-uscores1}[arithmetic and bitwise operators], {link-with-uscores2}[comparison operators].
For symmetrical binary operators you need to define two methods so that the order of operands doesn't matter, ex: ``++__add__++`` and ``++__radd__++``.
This rule raises an issue when an operator is used on incompatible types. Types are considered incompatible if no built-in operations between those types exist and none of the operands has implemented the corresponding special methods.