問題タブ [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 投票する
2 に答える
111 参照

python - モジュールで定義される前に使用された属性

コードは次のとおりです。

次に、次のように実行します: $ python a.py NameError: name 'bar' is not defined

エラー手段は、実行bar時に定義されていませんALL_FUNC = [bar, foo]。しかし、インタプリタがモジュール内の関数を見つけられないのはなぜbarでしょうか? barの後に定義されているという理由だけでALL_FUNC?

これを見てください、これはpythonクラスです、

どうやら、上記のコードはエラーなしで実行されるようですが、アクセスされた場所 (in ) の後にbarinAも定義されているのに__init__、なぜself.bar()エラーなしで見つかるのでしょうか?

ファローアップ

ここに別のモジュールがあります。

次に、このように実行します。

エラーなし!なんで?barエラーになるはずですよね?で使用されていない__main__ため、エラーが検出されないだけですか?でもbarの定義は実行されますよね?

0 投票する
4 に答える
430 参照

c++ - C ++での機能:使用する前に定義する

C / C ++では、呼び出し元関数は、呼び出し先関数が呼び出し元に表示されている場合にのみ呼び出し先関数を呼び出すことができます。つまり、呼び出し先の定義は、使用される場所の前に行う必要があります。それ以外の場合は、前方宣言を使用します。

これが私の問題です、

上記のコードは問題なく動作します。しかし、foo呼び出しbarと私はbarの定義を前に置いfooたり、前方宣言したりしませんbarでした。呼び出しをどのように機能させることができbarますfooか?コンパイラはどのようにして見つけることができますbarか?

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

python - ミックスインの順序は派生クラスにどのように影響しますか?

たとえば、タッチすることで互いにオーバーラップする次のミックスインがありますdispatch()

ビューで注文を確認したい場合は、A-> Bをチェックしてください。コードはMyView(FooMixin, BarMixin, View)またはMyView(BarMixin, FooMixin, View)ですか?

そして、なぜ私たちは常にViewミックスインの後にまたはそのサブクラスを置くのですか?(djangoのジェネリックビューのソースコードを読んでこれに気づきましたが、その背後にある理論的根拠があればわかりません)

0 投票する
3 に答える
125 参照

c# - 抽象クラスの「this」の型とオーバーロードされたメソッドの解決順序の混乱

この非常に単純な例は私を混乱させます:

これの出力は

「Got A」までは大丈夫です。class のインスタンスでX.XMethod(B)メソッドを呼び出すと、メソッドが呼び出されると思います。MB

ここで何が起こっているのですか?提供された引数の型が であり、 ではないことが明らかな場合、 が呼び出され、 がXMethod(A)呼び出されないのはなぜですか?XMethod(B)BA

PS: 同等の実装のために Java で同じ出力を得ました。

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

python - メソッド解決順序エラー

これは、深刻な問題というよりも、好奇心の問題です。

私は多重継承で遊んでいて、これに出くわしました:

取得しTypeErrorます。ただし、多重継承の順序を逆にすると、次のようになります。

正常に動作します。object最初に、 beforeの継承Aによって、ある種の名前のあいまいさが生じると思いました。誰かがここで何が起こっているのか説明したいと思いますか?

0 投票する
3 に答える
362 参照

python - Pythonでメソッドの実行をたどる方法

ipython などのオープン ソースの python プロジェクトからソース コードを読み取ろうとしています。Eclipse のデバッグ ツールを使用してコードを段階的に実行する場合でも、さまざまなクラスのメソッドの実行フローに従うのが難しいと感じることがよくあります。コードが遠く離れたクラスの特定のメソッドにジャンプする理由はよくわかりません。

継承階層に違いないことはわかっていますが、たどるのが難しいと思います。コードの実行方法を理解するのに役立つツールはありますか? さまざまなメソッドの実行順序を視覚化するのが好きですか? それが完全に素朴な質問ではないことを願っています。

ありがとう。

0 投票する
4 に答える
1197 参照

ruby - 2 つの Ruby モジュールをマージしますが、含めません

ルックアップ チェーンを壊さずに 2 つの Ruby モジュールをマージしたいと考えています。BothAnB基本的に、A と B のテキスト ソース コードを連結し、新しい foo が古いものを置き換えたかのように、 の動作を正確に行いたいと考えています。この問題は、MRO が継承ダイヤモンドを線形化するときに発生します。

A と B はかなり複雑なモジュールであり、深い継承チェーンを持つことができます (これは、プログラマーがそれを行うことを可能にするメタプログラミング フレームワークのためのものです)。

Include B, Aルックアップ BothAnB->B->A->O の代わりに、BothAnB->B->O (およびオプションで ->A) である必要があるため、機能しません。私は近くに来ました:

  • A の継承ツリー全体のディープ クローニング (ダイヤモンドを削除するため)
  • undef_methodA のクローンで、B にあるメソッドを削除します
  • Moduleこの動作を反映するための新しいメソッドを作成する

これよりも良い解決策はありますか?を呼び出すときに少なくともいくつかのモジュールを認識できるようにしておくことが理想的ですBothAnB.ancestors

[注: Phrogz のフィードバックに基づいて 2 つの回答を得た後、質問を完全に変更しました。

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

python-3.x - python3 super は PyQt クラスでは動作しません

python3 には簡単なプログラムがあります。

a) クラス Foo が QtCore.QObject および Bar から継承すると、次のようになります。

b) クラス Foo が FakeQObject および Bar から継承すると、次のようになります。

問題は、なぜ a) の場合、Bar init が呼び出されないのかということです。

同様の質問 here pyQt4 and inheritanceを見つけましたが、良い答えはありません。

前もって感謝します!

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

python - Python で複数の継承を使用して特定の __init__ の実行を強制する

私は__init__実行の順序を正しくしようとしています。階層は 2 つのブランチで構成されます。左のブランチは、右のブランチのいくつかの抽象メソッドを実装しています。右枝にも分岐があります。今、私はそれらを実行したいと思います: 最初に上から下に左、次に右に上から下。

Python 3でそれを達成する方法はありますか?

したがって、基本的には、次のように番号を順番に出力する必要があります (そうではありません)。

残念ながら、L2 は R2 の抽象メソッドを実装しているため、L2 と R2 の順序を変更することはできません (変更するとエラーが発生します)。

出来ますか?

(この種の問題を簡単に解決するための MRO について考える良い方法を知っていますか?)

編集: 私は問題ではないと思っていましたが、私の実際の構造では、L2a(L1)、L2b(L1)、L2(L1a、L2a) のように L 側にダイヤモンドがあることに注意してください。これは、いくつかの機能を完全に分割することです。