Python ではクラスメソッドの第一引数は self にします。
クラスメソッドを定義する度に当たり前のように self を書きますが、実はこの self、必須ではありません。
Python の文法的には、「クラスのインスタンスからメソッドを呼び出した時、メソッドの第一引数がインスタンス自身になる」と定められているだけで、第一引数を self とするのはあくまで慣習です。
# selfは予約語ですらない >>> import keyword >>> 'self' in keyword.kwlist False
というわけで、self を別の単語に変えても問題なく動作します。
# selfの代わりにthis >>> class Sample(object): ... def __init__(this): ... this.sample = 10 ... ... def func(this): ... print(this.sample) ... # 問題なく動作する >>> sample = Sample() >>> sample.func() 10
また、第一引数を self ではなく通常の引数として使うことも可能です。この場合、クラスの外から クラス名.メソッド名 と呼ぶことで、c++ や Java で言うところの static関数のような使い方ができます(このような使い方のための staticmethod デコレータもあります)。
# selfの無いクラスメソッド >>> class Sample(object): ... def func(x, y): ... print(x + y) ... # クラス名が名前空間のようになる >>> Sample.func(2, 3) 5
ここまで普段はあまり意識しない self の性質について述べてきました。
しかし! クラスメソッドの第一引数を self にするというのは、Python での絶対的な慣習です。あえてこれを破る積極的な理由は見つかりません。
というわけで、本項で紹介したテクニックは、実際には使わない方が賢明です。
0 件のコメント:
コメントを投稿