问题标签 [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,但根据我对具有新样式类的 MRO 的理解,输出应该是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我一直假设的那样。

Python-2.x 中是否有某种方法可以在调用超级构造函数而不命名当前类(Bin in )时维护正确的 MRO(关于以正确的顺序初始化所有父类super(B, self).__init__(1, b, c))?

0 投票
4 回答
5220 浏览

c++ - C++ 中的方法解析顺序

考虑以下类层次结构:

  • 具有虚方法 foo() 的基类 Object
  • 具有多重继承(虚拟和非虚拟)的任意层次结构;每个类都是 Object 的子类型;其中一些覆盖 foo(),一些没有
  • 此层次结构中的类 X,不覆盖 foo()

如何确定在 C++ 中对 X 类的对象调用 foo() 时将执行哪个方法?

(我正在寻找算法,而不是任何特定情况。)

0 投票
2 回答
1187 浏览

python - Python中类的前向声明

以下程序可以成功运行:

我想将 、 和 的定义保留SimpleComposite三个__main__不同的文件中,但我不能这样做,因为我无法导入Simplecomposite.py也无法Composite导入simple.py.

您将如何修改类定义以便可以保留单独的文件?

谢谢你。

PS。我已经阅读了几个与“前向声明”相关的答案,但找不到我的具体问题的答案。

0 投票
2 回答
88 浏览

c# - 基类型的方法解析

我的情况是这样的:

那么当我调用时调用了哪个方法InheritedClassInstance.SomeMethod?它是调用InheritedClassInstance.AnotherMethod还是 BaseClass 的AnotherMethod

0 投票
2 回答
740 浏览

perl - 为什么此方案会出现错误“C3 合并期间层次结构不一致”?

以及——如果有的话——我能做些什么呢?

  • 好的,我知道Win32继承自Unix,但是调度是Win32 -> Unix并且我希望Unix实现作为默认值,直到我覆盖它并调度到我自己的 Win32 实现。

  • 我也明白,因为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__?

从内置类型以及其他类派生时,似乎内置类型的构造函数不调用超类构造函数。这导致 __init__ 方法不会被 MRO 中内置函数之后的类型调用。

例子:

在此示例中,从未调用 A.__init__。当 B 被定义为class B(A, list)——切换继承顺序——它按预期工作(即 A.__init__ 被调用)。

这种对继承顺序的非常微妙的依赖似乎相当不符合pythonic,是这样打算的吗?这也意味着您绝不能从复杂类层次结构中的内置类型派生,因为当其他人从您的类派生时,您无法知道内置类型在 MRO 中的最终位置(维护恐惧)。我错过了什么吗?

额外信息:Python 3.1 版