問題タブ [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 - モジュールで定義される前に使用された属性
コードは次のとおりです。
次に、次のように実行します: $ python a.py NameError: name 'bar' is not defined
エラー手段は、実行bar
時に定義されていませんALL_FUNC = [bar, foo]
。しかし、インタプリタがモジュール内の関数を見つけられないのはなぜbar
でしょうか? bar
の後に定義されているという理由だけでALL_FUNC
?
これを見てください、これはpythonクラスです、
どうやら、上記のコードはエラーなしで実行されるようですが、アクセスされた場所 (in ) の後にbar
inA
も定義されているのに__init__
、なぜself.bar()
エラーなしで見つかるのでしょうか?
ファローアップ
ここに別のモジュールがあります。
次に、このように実行します。
エラーなし!なんで?bar
エラーになるはずですよね?で使用されていない__main__
ため、エラーが検出されないだけですか?でもbar
の定義は実行されますよね?
c++ - C ++での機能:使用する前に定義する
C / C ++では、呼び出し元関数は、呼び出し先関数が呼び出し元に表示されている場合にのみ呼び出し先関数を呼び出すことができます。つまり、呼び出し先の定義は、使用される場所の前に行う必要があります。それ以外の場合は、前方宣言を使用します。
これが私の問題です、
上記のコードは問題なく動作します。しかし、foo
呼び出しbar
と私はbar
の定義を前に置いfoo
たり、前方宣言したりしませんbar
でした。呼び出しをどのように機能させることができbar
ますfoo
か?コンパイラはどのようにして見つけることができますbar
か?
python - ミックスインの順序は派生クラスにどのように影響しますか?
たとえば、タッチすることで互いにオーバーラップする次のミックスインがありますdispatch()
。
ビューで注文を確認したい場合は、A-> Bをチェックしてください。コードはMyView(FooMixin, BarMixin, View)
またはMyView(BarMixin, FooMixin, View)
ですか?
そして、なぜ私たちは常にView
ミックスインの後にまたはそのサブクラスを置くのですか?(djangoのジェネリックビューのソースコードを読んでこれに気づきましたが、その背後にある理論的根拠があればわかりません)
c# - 抽象クラスの「this」の型とオーバーロードされたメソッドの解決順序の混乱
この非常に単純な例は私を混乱させます:
これの出力は
「Got A」までは大丈夫です。class のインスタンスでX.XMethod(B)
メソッドを呼び出すと、メソッドが呼び出されると思います。M
B
ここで何が起こっているのですか?提供された引数の型が であり、 ではないことが明らかな場合、 が呼び出され、 がXMethod(A)
呼び出されないのはなぜですか?XMethod(B)
B
A
PS: 同等の実装のために Java で同じ出力を得ました。
python - メソッド解決順序エラー
これは、深刻な問題というよりも、好奇心の問題です。
私は多重継承で遊んでいて、これに出くわしました:
取得しTypeError
ます。ただし、多重継承の順序を逆にすると、次のようになります。
正常に動作します。object
最初に、 beforeの継承A
によって、ある種の名前のあいまいさが生じると思いました。誰かがここで何が起こっているのか説明したいと思いますか?
python - Pythonでメソッドの実行をたどる方法
ipython などのオープン ソースの python プロジェクトからソース コードを読み取ろうとしています。Eclipse のデバッグ ツールを使用してコードを段階的に実行する場合でも、さまざまなクラスのメソッドの実行フローに従うのが難しいと感じることがよくあります。コードが遠く離れたクラスの特定のメソッドにジャンプする理由はよくわかりません。
継承階層に違いないことはわかっていますが、たどるのが難しいと思います。コードの実行方法を理解するのに役立つツールはありますか? さまざまなメソッドの実行順序を視覚化するのが好きですか? それが完全に素朴な質問ではないことを願っています。
ありがとう。
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_method
A のクローンで、B にあるメソッドを削除しますModule
この動作を反映するための新しいメソッドを作成する
これよりも良い解決策はありますか?を呼び出すときに少なくともいくつかのモジュールを認識できるようにしておくことが理想的ですBothAnB.ancestors
。
[注: Phrogz のフィードバックに基づいて 2 つの回答を得た後、質問を完全に変更しました。
python-3.x - python3 super は PyQt クラスでは動作しません
python3 には簡単なプログラムがあります。
a) クラス Foo が QtCore.QObject および Bar から継承すると、次のようになります。
b) クラス Foo が FakeQObject および Bar から継承すると、次のようになります。
問題は、なぜ a) の場合、Bar init が呼び出されないのかということです。
同様の質問 here pyQt4 and inheritanceを見つけましたが、良い答えはありません。
前もって感謝します!
python - Python で複数の継承を使用して特定の __init__ の実行を強制する
私は__init__
実行の順序を正しくしようとしています。階層は 2 つのブランチで構成されます。左のブランチは、右のブランチのいくつかの抽象メソッドを実装しています。右枝にも分岐があります。今、私はそれらを実行したいと思います: 最初に上から下に左、次に右に上から下。
Python 3でそれを達成する方法はありますか?
したがって、基本的には、次のように番号を順番に出力する必要があります (そうではありません)。
残念ながら、L2 は R2 の抽象メソッドを実装しているため、L2 と R2 の順序を変更することはできません (変更するとエラーが発生します)。
出来ますか?
(この種の問題を簡単に解決するための MRO について考える良い方法を知っていますか?)
編集: 私は問題ではないと思っていましたが、私の実際の構造では、L2a(L1)、L2b(L1)、L2(L1a、L2a) のように L 側にダイヤモンドがあることに注意してください。これは、いくつかの機能を完全に分割することです。