単純なベクトル クラスを考えてみましょう。
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
長さを計算するメソッドが必要です。クラス内で定義したい場合、どのように見えるでしょうか?
def length(self):
return math.sqrt(self.x ** 2 + self.y ** 2)
それをグローバルなメソッド/関数として定義するとしたら、どのように見えるべきでしょうか?
def length_global(vector):
return math.sqrt(vector.x ** 2 + vector.y ** 2)
したがって、全体の構造は同じままです。これをどのように活用できますか?length
クラスのメソッドを書いていないと仮定すると、次のようにするVector
ことができます。
Vector.length_new = length_global
v = Vector(3, 4)
print(v.length_new()) # 5.0
これは、 の最初のパラメータがのパラメータlength_global
として再利用できるため機能します。これは、明示的な なしでは不可能です。self
length_new
self
明示的な必要性を理解するもう 1 つの方法はself
、Python が構文糖衣を追加する場所を確認することです。心に留めておくと、基本的には次のような呼び出しです
v_instance.length()
内部的に変換されます
Vector.length(v_instance)
実際に Python でインスタンス メソッドを作成するわけではself
ありません。あなたが書くのは、最初のパラメータとしてインスタンスを取る必要があるクラスメソッドです。したがって、インスタンス パラメータを明示的にどこかに配置する必要があります。