問題タブ [object-composition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 継承を使用して合成を行う巨大な Python クラスのリファクタリング
pygame
数年前にゲームを作りました。それは機能しましたが、最適なコーディング スタイルではなく、古典的なコードの匂いがたくさんありました。私は最近それを取り戻し、今回はより規律を持ってリファクタリングしようとしています。
pygame.sprite.DirtySprite
大きなコード臭の 1 つは、以下に関連する多くのコードを継承する巨大なクラス、GameObjectを持っていたことです。
- スプライトを動かすさまざまな方法
- スプライトをアニメーション化するさまざまな方法
- スプライトを爆発させるさまざまな方法
- 等
スプライトが動作する方法について私が頭を悩ませていたほど、コードの重複が増え、変更がより困難になっていました。そこで、機能を多数の小さなクラスに分割し、オブジェクトの作成時にそれらを渡し始めました。
より多くのコードをこれらのヘルパー クラスに分解するにつれて、コードは確実に改善され、柔軟性が増し、重複が少なくなりました。ただし、ヘルパー クラスの種類ごとに、パラメーターの数がどんどん長くなっていきました。スプライトの作成は雑用になり、コードは見苦しくなりました。そのため、別のリファクタリング中に、構成を行うために非常に小さなクラスの束を作成しました。
私はこのアプローチの方が好きです。これは一般的なアプローチですか?すべてのロジックを小さなクラスに分割することには同じ利点があるようですが、オブジェクトの作成ははるかにクリーンです。
ただし、このアプローチはそれほど動的ではありません。たとえば、実行時に新しいマッシュアップを決定することはできません。しかし、これは私が実際に行っていたことではありませんでした。私は多くのマッシュアップを行っていますが、それらがクラス ステートメントを使用して静的に定義されていることは問題ないようです。
将来の保守性と再利用に関して、何か欠けているものはありますか? 継承よりも合成の方がいいと聞きますが、これは継承を使って合成しているような気がするので、これでいいのかなという感じです。
私が使用すべき別のパターンはありますか?
python - Python でのコンポジションの現実的な使い方
私はpythonでの構成について読んでおり、stackoverlowでいくつかの記事と回答をたどった後、それが何であり、どのように実装されているかを理解できると思います。しかし、私が答えを見つけることができない1つの質問は、なぜ構成ですか? (相続による利益との比較ではありません)。これは私がここから得た例です:
2 つの関連するクラスを分離することでメリットが得られる、少し現実的な例で理解したいと思います (具体的にはどのようなメリットがありますか? )
python - Python で構成による委譲を使用して継承動作を正確に模倣できますか?
Python では、コンポジションによる委任で次の動作を模倣したいと考えています。
出力は次のとおりです。
つまり、特定のメソッドを除いて、既存のクラスの動作をコピーするクラスを作成できるようにしたいのです。ただし、関数をオーバーライドした場合に備えて、プログラムが既存のクラスのメソッドに入ると、新しいクラスに戻ることが重要です。ただし、次のコードではそうではありません。
Object4 の method2 が Object3 の method1 から呼び出される代わりに (私が望む動作)、Object3 の method2 が呼び出されます (例外が発生します)。Object3 を変更せずに、希望する動作を実現する方法はありますか?
python - Python 3 でオブジェクトのコンテナー クラスを決定する
Class1
次のようにインスタンス化さClass2
れます。Class2
次のような別の変数も含まれています。
に読み書きできるメソッドmyDef()
を作成したいと考えています。内部からアクセスするにはどうすればよいですか?Class1
a
a
myDef()
a