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

python - 新しいスタイルのクラスのメソッド解決順序 (MRO) ?

Python in a Nutshell (2nd Edition)には、
古いスタイルのクラスを使用して、メソッドが従来の解決順序で解決される方法
と、新しい順序でどのように異なるかを示す例があります。

同じ例を新しいスタイルで書き直して試してみましたが、結果は古いスタイルのクラスで得られたものと変わりません。この例を実行するために使用している Python のバージョンは2.5.2 です。以下に例を示します。

呼び出しinstance.amethod()は. Base1_ Base3呼び出しは次のようDerived.__mro__に表示されます。

(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)

新しいスタイル クラスを使用した MRO の理解が間違っているのか、それとも私が検出できないばかげた間違いを犯しているのか、私にはわかりません。MROをよりよく理解するのを手伝ってください。

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

python - 「mro()」は何をしますか?

django.utils.functional.py

わかりませんmro()。それは何をし、「mro」はどういう意味ですか?

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

python - 親クラス初期化子を暗黙的に呼び出す

上記のコードでは、コメントアウトされた__init__呼び出しは、スーパークラスの初期化を行うための一般的に受け入れられている「スマート」な方法のようです。ただし、クラス階層が変更される可能性がある場合は、最近までコメントなしのフォームを使用していました。

B上記の階層でのスーパーコンストラクターの呼び出しでは、これB.__init__が再度呼び出されますが、self.__class__実際には、私がいつも想定していたものCではないようです。B

BPython-2.xで、現在のクラス( in in )に名前を付けずにスーパーコンストラクターを呼び出すときに、(すべての親クラスを正しい順序で初期化することに関して)適切なMROを維持できる方法はありsuper(B, self).__init__(1, b, c)ますか?

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

c++ - C++ でのメソッド解決順序

次のクラス階層を検討してください。

  • 仮想メソッド foo() を持つ基本クラス オブジェクト
  • 複数の継承 (仮想および非仮想) を持つ任意の階層。各クラスは Object のサブタイプです。それらのいくつかは foo() をオーバーライドし、いくつかはオーバーライドしません
  • foo() をオーバーライドしない、この階層のクラス X

C++ のクラス X のオブジェクトで foo() の呼び出し時に実行されるメソッドを決定する方法は?

(特定のケースではなく、アルゴリズムを探しています。)

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

python - Pythonでのクラスの前方宣言

次のプログラムは正常に実行できます。

Simple、、の定義Composite__main__3つの異なるファイルに保持したいのですが、にインポートできず、にSimpleインポートできないため、それを行うことができません。composite.pyCompositesimple.py

別々のファイルを保持できるように、クラス定義をどのように変更しますか?

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

PS。「前方宣言」に関連するいくつかの回答を読みましたが、特定の問題に対する回答が見つかりませんでした。

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

c# - 基本タイプによるメソッド解決

私の状況はこれです:

では、呼び出すときにどのメソッドが呼び出されますInheritedClassInstance.SomeMethodか?InheritedClassInstance.AnotherMethodそれは、、またはBaseClassを呼び出しますAnotherMethodか?

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

perl - このスキームで「C3 マージ中に階層が矛盾しています」というエラーが発生するのはなぜですか?

そして、何かあるとすれば、私はそれについて何ができますか?

  • さて、私はそれがWin32から継承されていることを理解していますUnixが、ディスパッチは.Win32 -> UnixUnix

  • また、クラス名を渡すだけなので、継承は大きな問題ではないことも理解していFile::Spec::xますが、このように調整するクラスが実際に必要な場合はどうなるのだろうかと考えなければなりません。

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

python - MyClass.__class__ が MyClass().__class__ とは異なる値を返すのはなぜですか?

「person.Person.」と呼べるようにしたいです。class ' を呼び出して、'class person.Person' を返します。これは、person オブジェクトの場合と同様です。

これが Person 継承ツリーです...

何が起きてる?

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

django - django add_to_class()でモデルの継承/MROが正しく機能しない

add_to_class() を介してフィールドを追加するときに、モデルの継承に問題があります。私はモデルを持っていますFile(models.Model)-Image(File)これらは django-filer から来ています。

私のアプリでは、それらをインポートしてフィールドとメソッドを追加しています:

イメージはそれらの両方を継承する必要がありますが、フィールドではなくメソッドのみを取得します。

どんな手掛かり?

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

python - Python 3 の組み込み型 __init__ は super().__init__ を呼び出しませんか?

組み込み型および他のクラスから派生する場合、組み込み型のコンストラクターがスーパークラス コンストラクターを呼び出していないようです。これにより、MRO のビルトインの後にある型に対して __init__ メソッドが呼び出されなくなります。

例:

このサンプルでは、​​ A.__init__ は呼び出されません。代わりにB が定義されている場合class B(A, list)(継承順序を切り替える場合)、意図したとおりに動作します (つまり、 A.__init__ が呼び出されます)。

継承順序へのこの非常に微妙な依存は、かなり非 Pythonic のように見えますが、このように意図されていますか? また、複雑なクラス階層の組み込み型から派生させてはならないということも意味します。なぜなら、他の誰かがクラスから派生したときに組み込み型が MRO のどこに行き着くのかを知ることができないからです (メンテナンスの恐怖)。何か不足していますか?

追加情報: Python バージョン 3.1