問題タブ [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.

0 投票する
1 に答える
156 参照

python - 階層内のすべてのクラスに対してメソッドが (存在する場合は 1 回) 呼び出されるようにするにはどうすればよいですか?

私は、サブクラスがオプションで指定された名前のメソッドを定義することができるクラス階層を持っていdo_itますdo_all. これを達成するために私が得ることができる最も近いものは次のようなものです:

B().do_all()これはほぼ意図したとおりに機能します。たとえば、

しかし、その結果、その子孫のすべてのクラスに対してBsが重複して呼び出されます。do_itたとえばD().do_all()

do_it親を実装していないクラスからの親への重複呼び出しを回避するにはどうすればよいですか? これは、私がやろうとしていることを達成する正しい方法ですか?

0 投票する
2 に答える
4891 参照

python - 多重継承における Python とメソッドの順序

Python で、同じメソッドで 2 つのクラスを定義し、それら 2 つのクラスを親クラスにする場合は、次のようになります。

と:

子クラスを定義し、A と B の順序で 2 つの親クラスを追加すると、次のようになります。

self.method() を呼び出すときに使用されるメソッドは、A に属するメソッド、または継承リストの最初のクラスです。

これは私のすべてのテストケースに当てはまりますが、ドキュメントやオンラインで、どのプラットフォームや言語の実装でも実際に安全であるという場所を見つけることができません。リスト内の最初に継承されたクラスが常に他のクラスよりも使用されるメソッドであると仮定しても安全であることを誰でも確認できますか (super().__init__() 呼び出しなどに関係なく)、またはこれを確認する公式ドキュメントを参照してください。

ありがとうございました、

0 投票する
0 に答える
217 参照

python - スーパー (タイプ、オブジェクトまたはタイプ)、MRO

上記のコードが出力される理由:

一方、ドキュメントhttp://docs.python.org/2/library/functions.html#superは次のように述べています。

使用されている MRO は、super() の「type」パラメータのものではなく、「object-or-type」パラメータのもののようです。これは Python ドキュメントのエラーですか?

0 投票する
5 に答える
172 参照

python - 基本クラスが異なる初期パラメータを持つ場合のメソッド解決順序

Python で MRO を理解しようとしています。ここにいろいろ投稿がありますが、特に欲しいものが手に入っているわけではありません。から派生した2 つのクラスAを考えてみましょう。それぞれ異なるパラメータを使用します。BBaseClass__init__

問題は、とのC両方からサード クラスを派生させる必要がある場合、どのように を初期化する必要があるかということです。またはのいずれかから安全に導出できます。AB__init__CBA

上記の実装ではエラーが発生します。