Pythonのコードについての質問です。

コード例)
・クラス定義

class Orange:
    def __init__(self,w,c):
        self.weight=w
        self.color=c
        self.mold=0
        print("Created!")

    def rot(self,days,temp):
        """temp(温度)は摂氏"""
        self.mold=days*temp

・インスタンスの利用例

orange=Orange(200,"orange")
print(orange.mold)

orange.rot(10,37)
print(orange.mold)

①__init__は、どういう働きをしているのか。
(初期化・・・といっても必要性がわかりません・・・)

②__init__の引数selfの必要性が参考書を見てもよくわからない。
(これは、次のインスタンス変数を定義する際のself変数とは別物ですよね?)

③試してみると__init__内で定義していない変数(試したのはコード5行目のmold)は、後で自分で定義したメソッド内(rot)で変数として使えなかったが、なぜ?(これはたぶん①がわかってないからだと思います)

以上3つが疑問点です。よろしくお願いいたします。