hiro.aさんの書いているコードは、__init__が2回定義されているので誤りのようです。
以下のコードであると仮定して話を進めます。
python
1class num:
2 def __init__(self, number):
3 self.n = number
4
5 def __add__(self, other):
6 return abs(self.n + other.n)
7
8x = num(-20)
9y = num(10)
10
11print(x + y)
12
この問題は、pythonの演算とメソッドの関係を理解するためのものです。
pythonの演算は、コンパイラによってpythonバイトコードに変換され、
それが実行されるときにインタープリタによってメソッド呼び出しとして実行されます。
たとえば、1+2という式は、コンパイラによってBINARY_ADDというバイトコードに変換されます。
BINARYは二進数ではなく、二項演算の意味です。
インタプリタがBINARY_ADDを実行するとき、インタプリタは左側のオブジェクトである1が
__add__というメソッドをもっているかを調べて持っていることを確認します。
そこで1のメソッド__add__に左側のオブジェクトである2を引数として呼び出します。
つまり以下のことを行っています。
python
1>>> (1).__add__(2)
23
私が修正したコードでは クラスnumの__add__メソッドが定義されているので、
print(x + y)の括弧の中の x + y の部分で__add__メソッドが呼び出されます。
absは絶対値(absolute)を返す関数です。
abs(1)は1、abs(-5)は5です。
numクラスのインスタンスである num(-20) と num(10)を足すと(-20+10)は-10になり、その絶対値は10なので10が印字されます。