問題タブ [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 で多重継承を使用する MRO
Python Web ページのドキュメントでは、python のクラシック クラスのメソッド解決順序は、左から右への深さ優先検索として説明されています。このコードでこれをテストしようとしました:
オブジェクト D のインスタンスを作成すると:
私は結果を得る:
MRO は深さ優先であるため、"Initialized A"、"Initialized D" の出力を期待していましたが、初期化は最初に B で検索されます。 B (つまり A) の基本クラスの関数。Aの代わりにCのinit-functionを取得する理由を説明してもらえますか?
python - Beazley 4e PER pg 135,136:sub.mroのcの場合?
IClassの最後の行は正確に何をしますか?
subclasscheckはsubclasscheckをオーバーロードしますが、通常、演算子をオーバーロードしている間、次のようなことを行います。
ここでadt+4.0、adtはユーザー定義型=ユーザークラスobject(instance)であり、4.0は組み込み型であり、.real、.imaginaryが事前構成されているため、adtが複雑な場合、これは次のようになります。adt。(self、other ) add(self、other)を使用すると、「adt」への参照が生成され、「self」にフィードされ、「other」は4.0を参照します。
しかし、以下の例では:
ここで、サブクラスチェックの自己とサブとは何ですか?サブクラスチェックはどのよう にオーバーロードされていますか?
とにかく、それが何らかの形でオーバーロードされていると仮定すると、FooProxyへの参照がselfとIFoo->subに渡されます。したがって、.. IFoo.mro()は、たとえばIFooのメソッド解決順序を生成します。したがって、IClass ..の場合、これは単なるオブジェクトになります。
誰かがここで何が起こっているのか説明できますか?基本的に、FooProxyがIClassのグループ化されたクラスのサブクラスである場合、「any」はTrueを返す必要があります。
c++ - 基本メンバー変数間のあいまいさを解消するために using を使用できないのはなぜですか?
この単純なクラス階層では、クラス C に「B::x を使用して」と伝えることでどの x を使用するかを明確にしようとしていますが、これは G++ でコンパイルされません。関数 foo. using を使用して非表示のメソッドを促進できることは知っていますが、変数を使用できないのはなぜですか? クラス X を X の定義を持つ A と B の仮想ベースとして作成することを検討しましたが、それは厳密には私が望むものではありません。私が欲しいのは、B から派生した場合を除いて、直接派生したものによって使用される A:x です。Python がメンバー (名前) 解決順序アルゴリズムで行う方法と似ています (最後のクラスが勝つため、この場合は B:xが使用されます。説明についてはhttp://starship.python.net/crew/timehorse/BFS_vs_MRO.htmlを参照してください。)
ISO C++ 2011 にはこの点で欠陥があるという私の評価は正しいでしょうか。「使用」を使用して基本メンバー変数を明確にすることは不可能ですか?
編集: コンパイラのバージョン: g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
python - __mro__ が dir(MyClass) に表示されないのはなぜですか?
出力:
__mro__
が記載されていないのはなぜdir()
ですか?
python - 階層内に古いスタイル クラスと新しいスタイル クラスを混在させるとどうなりますか?
次のようなものがあるとします
階層が混在している場合、Python は継承とメソッド解決の順序に対してどのように動作しますか? 古いトラバーサル、新しいトラバーサル、階層のどのブランチが歩いているかに応じて 2 つの組み合わせに従うか?
python - 親クラス __init__() で super() を呼び出すと、サブクラス __init__() の動作が変わるのはなぜですか?
super()
多重継承のコンテキストでの動作を理解しようとしています。super()
test2.py の親クラスでの呼び出しが両方の親に対して呼び出される理由について混乱してい__init__()
ますか?
test1.py
生成:
test2.py
生成:
python - Python で mro と super() を理解する
MROは、クラス階層で属性が見つかる順序である ことを理解しています。
myInstance.foo のように属性「foo」を使用すると、MRO で最初に見つかった foo が使用されます。
そして、検索は通常停止します。
ここで、 bar() が を利用するとしsuper()
ます。
MRO の次の基本インスタンスを返すためsuper()
、myInstance.bar() はその階層チェーン内のすべての bar() を呼び出します。
すべてのスーパー クラスの bar() が super().bar() も呼び出す場合
、MRO が指定する順序で bar() が呼び出されます。
それらを正しく理解していますか?