質問

他の言語にも Python 記述子プロトコルのようなものは実装されていますか?これは、包含クラスの実装を肥大化させずにモジュール性/カプセル化を強化する良い方法のように思えますが、他の言語で同様のことを聞いたことがありません。ルックアップのオーバーヘッドのため、他の言語には存在しない可能性がありますか?

役に立ちましたか?

解決

直接的に同等のものについても聞いたことがありません。おそらく、特に非常に強力なマクロを備えた Lisp のような言語では、マクロを使用して同じ効果を達成することができます。

これは非常に強力であるため、他の言語が同様のものを組み込み始めたとしても、私はまったく驚かないでしょう。

他のヒント

Ruby と C# ではどちらも、Python と同様に、属性のゲッター/セッター メソッドを指定することでアクセサーを簡単に作成できます。ただし、これは、Python で許可されている方法でこれらのメソッドのコードを別のクラスに自然に記述できるように設計されていません。実際には、記述子プロトコルを通じて定義された属性が同じクラスに実装されているのを見るたびに、これがどれほど重要なのかわかりません。

編集:くそー、私の失読症(不注意な読書のことです)。どういうわけか、私は両方を入力しているときでも、常に「記述子」を「デコレータ」と読んだり、その逆を読んだりしてきました。質問とはまったく関係のない情報ではありますが、有効な情報が含まれているため、私の投稿はそのままにしておきます。

「デコレータ」という用語自体は、実際には、有名な「デザイン パターン」の本に記載されているデザイン パターンの名前です。Wikipedia の記事には、さまざまなプログラミング言語でのデコレータの使用例が多数含まれています。 http://en.wikipedia.org/wiki/Decorator_pattern

ただし、この記事のデコレータはオブジェクト指向です。それらには、別の既存のクラスが何らかの方法で異なる動作を行うことができる事前定義されたインターフェイスを実装するクラスがあります。Python デコレーターは、実行時に関数を別の関数に置き換えることによって機能的に動作し、その関数の変更/置き換え、コードの挿入などを効果的に行うことができます。

これは Java の世界ではアスペクト指向プログラミングとして知られており、AspectJ Java コンパイラーを使用すると、この種の処理を実行し、AspectJ コード (Java のスーパーセット) を Java バイトコードにコンパイルできます。

私は C# や Ruby にあまり詳しくないので、デコレーターのバージョンがどのようなものになるのか知りません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top