問題タブ [method-resolution-order]
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 - 階層内のすべてのクラスに対してメソッドが (存在する場合は 1 回) 呼び出されるようにするにはどうすればよいですか?
私は、サブクラスがオプションで指定された名前のメソッドを定義することができるクラス階層を持っていdo_it
ますdo_all
. これを達成するために私が得ることができる最も近いものは次のようなものです:
B().do_all()
これはほぼ意図したとおりに機能します。たとえば、
しかし、その結果、その子孫のすべてのクラスに対してB
sが重複して呼び出されます。do_it
たとえばD().do_all()
、
do_it
親を実装していないクラスからの親への重複呼び出しを回避するにはどうすればよいですか? これは、私がやろうとしていることを達成する正しい方法ですか?
python - 多重継承における Python とメソッドの順序
Python で、同じメソッドで 2 つのクラスを定義し、それら 2 つのクラスを親クラスにする場合は、次のようになります。
と:
子クラスを定義し、A と B の順序で 2 つの親クラスを追加すると、次のようになります。
self.method() を呼び出すときに使用されるメソッドは、A に属するメソッド、または継承リストの最初のクラスです。
これは私のすべてのテストケースに当てはまりますが、ドキュメントやオンラインで、どのプラットフォームや言語の実装でも実際に安全であるという場所を見つけることができません。リスト内の最初に継承されたクラスが常に他のクラスよりも使用されるメソッドであると仮定しても安全であることを誰でも確認できますか (super().__init__() 呼び出しなどに関係なく)、またはこれを確認する公式ドキュメントを参照してください。
ありがとうございました、
python - スーパー (タイプ、オブジェクトまたはタイプ)、MRO
上記のコードが出力される理由:
一方、ドキュメントhttp://docs.python.org/2/library/functions.html#superは次のように述べています。
使用されている MRO は、super() の「type」パラメータのものではなく、「object-or-type」パラメータのもののようです。これは Python ドキュメントのエラーですか?
python - 基本クラスが異なる初期パラメータを持つ場合のメソッド解決順序
Python で MRO を理解しようとしています。ここにいろいろ投稿がありますが、特に欲しいものが手に入っているわけではありません。から派生した2 つのクラスA
を考えてみましょう。それぞれ異なるパラメータを使用します。B
BaseClass
__init__
問題は、とのC
両方からサード クラスを派生させる必要がある場合、どのように を初期化する必要があるかということです。またはのいずれかから安全に導出できます。A
B
__init__
C
B
A
上記の実装ではエラーが発生します。