Python学習(書籍Fluent Pythonより)
ソースコード
写経したコードは以下のとおり。__init__に関しては特筆する必要はないでしょう。(自分には必要だけれど)
from math import hypot class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y def __repr__(self): return 'Vector(%r, %r)' % (self.x, self.y) def __abs__(self): return hypot(self.x, self.y) def __bool__(self): return bool(abs(self)) def __add__(self, other): x = self.x + other.x y = self.y + other.y return Vector(x, y) def __mul__(self, scalar): return Vector(self.x * scalar, self.y * scalar) v1 = Vector(2, 4) v2 = Vector(2, 1) print(v1 + v2) # Vector(4, 5) v = Vector(3, 4) print(abs(v)) # 5.0 print(v * 3) # Vector(9, 12) print(abs(v * 3)) # 15.0
各メソッドの機能
__repr__
offcial string representationとある。ソースコードにもあるprintなどで表示される表現を規定する、ってことでいいんでしょうか。(__str__()は文字列型へのデータ変換?なのでこれとは別。)
__abs__
組み込み関数abs(object)で呼ばれた時の動作。
__bool__
truth value testingとあるので、if文の条件に使うのか。
math.hypot()
なんだこれ、ってことでリファレンス。
9.2. math — Mathematical functions — Python 3.7.0 documentation
Return the Euclidean normとあり、まんまsqrt(x*x + y*y)と書いてあるのでベクトルの長さですね。
リファレンス
上記の特殊関数を調べるのに参考にした。
3. Data model — Python 3.7.0 documentation
追記
このページも結構良さそう。
特殊メソッド名 - Dive Into Python 3 日本語版