11.2.10インスタンスを関数的に呼び出す
>>> import math
>>> class Coordinate:
...    def __init__(self, x, y):
...       self.x = x
...       self.y = y
... #c(x, y)形式で呼び出せ、距離を求める
...    def __call__(self, o_x, o_y):
...       return math.sqrt(
...          (o_x - self.x)** 2 + (o_y - self.y)** 2)
...
>>> if __name__ =='__main__':
...    c = Coordinate(10, 20)
...    print(c(5, 15))
...
7.0710678118654755
>>>


  1. 1.必要なモジュールのインポート:

    • import math: 数学関連の関数や定数を利用するために math モジュールをインポートします。

  2. 2.Coordinate クラスの定義
    :

    • このクラスは2Dの座標を表します。

  3. 3.初期化メソッド (__init__)
    :

    • def __init__(self, x, y)::オブジェクトを初期化するための特殊メソッドです。
    • self.x = xself.y = y:初期化時に与えられた x と y の値をオブジェクトの属性として保存します。

  4. 4.コールメソッド (__call__)
    :

    • def __call__(self, o_x, o_y)::この特殊メソッドを定義することで、オブジェクトを関数のように呼び出せるようになります。
    • return math.sqrt((o_x - self.x)** 2 + (o_y - self.y)** 2):与えられた点 (o_x, o_y) とオブジェクトの座標 (self.x, self.y) 間のユークリッド距離を計算して返します。

  5. 5.メイン実行部分
    :

    • if __name__ =='__main__'::このコードは、このファイルが直接実行されたときのみ実行されます。
    • c = Coordinate(10, 20):Coordinateクラスのインスタンスを作成し、その座標を (10, 20) に設定します。
    • print(c(5, 15))c オブジェクトを関数のように呼び出し、点 (5, 15) との間の距離を計算し、結果を出力します。

結果として、座標 (10, 20)(5, 15) の間の距離が 7.0710678118654755 として出力されます。