yoraba build

備忘録を兼ねた技術ブログ

pythonにおいての拡張メソッド

多くのオブジェクト指向言語には拡張メソッドというものがあります。
端的に言えば、クラスの外部からメソッドをつけ足すというものです。
拡張メソッドには以下のような特徴があります。

メリット

  • ドット演算子で関数を繋げていくことが出来るので、実行順が解りやすい。

 関数呼び出しのネストが増えると、呼び出される順番を追うのが面倒になってきます。拡張関数を使えばネストを減らすことが出来ます。

  • ドットを打った時にインテリセンスの候補として出るので、IDEでのコーディング効率が上がる
  • 拡張対象クラスを手軽に非破壊編集出来る。

 継承して新しいクラスを作らなくても、ちょっとした機能追加が出来ます。

デメリット

  • しっかり整理しないと、どこから拡張されているのか解らなくなる

 拡張メソッドは多くの場合、拡張対象となるクラスの所在地とは別のファイルに定義します。どこで、どのクラスを拡張しているのかを把握しておかないと混乱を招きます。

デメリットは大きいですが、メリットも多大なものです。諸刃の剣といったところでしょうか。

pythonにおける拡張メソッド

pythonにおいては、拡張メソッドと称されるものはありません。
しかし同等のことを実現できる機能として、属性というものがあります。
クラス定義もオブジェクトであり、属性を持っていて、後から属性を追加することも出来ます。
属性を用いれば関数だけではなく変数を後から追加することさえ出来ます。

class a:
  pass
a.value1 = 1
print(a.value1)

組み込み型の拡張

 残念ながら、組み込み型の属性は原則的に編集することが出来ないようです。文字列や数値などの型を拡張出来る言語も多々ありますし、便利だと思うのですが。色々と課題が生じたのでしょうか?
 しかし、抜け道はあります。