问题标签 [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 投票
1 回答
145 浏览

python - Python关于MRO的文档有错吗?

我今天读了这个文档。有件事让我很困惑。

http://www.python.org/download/releases/2.3/mro/

在证明 Python 2.2 的 MRO 打破单调性的例子中,

我认为 Python 2.2 将为 Z 提供线性化的结果是:['Z', 'K1', 'C', 'K2', 'B', 'E', 'K3', 'D', 'A', 'object']但是,文档给出了L[Z,P22] = Z K1 K3 A K2 D B C E O

医生说,这个例子最初是由 Samuele Pedroni in here提供的,Samuele Pedroni 的回答和我的一样。

有什么我错过的吗?

0 投票
2 回答
241 浏览

c# - Why "Equals" method resolution with generics differs from explicit calls

I have the following example:

The question is why in the second "Equals" call I'm redirected to Object.Equals instead of Hello.Equals even though I'm specifying the exact type in generic argument?

0 投票
2 回答
2683 浏览

java - Java:重载方法解析

所以我有以下重载方法:

我知道变量arity方法在方法解析阶段的优先级最低,所以在这种情况下,如果我打电话foo((short)2, (short)4);,我会得到“Calling int-int”。

但是,如果我将方法 (3) 更改为foo(short a, double b),则选择变量 arity 方法!(Java 7)。谁能解释一下?

0 投票
1 回答
1546 浏览

python - mro 方法和类的 __mro__ 属性有什么区别?

mro在使用__metaclass__ = abc.ABCMeta. __mro__除了它返回一个列表而不是一个元组之外,它似乎相同。这是一个随机示例(ideone 片段):

后来我发现这不是唯一的,ABCMeta而是在所有新式类中都可用。

所以为什么?这不是做什么__mro__

0 投票
1 回答
154 浏览

python - 关于 python MRO 以及 super() 的行为方式

今天我试图弄清楚__mro__和 super 在 python 中是如何工作的,我发现了一些对我来说既有趣又奇怪的东西,因为我得到了一些我在阅读后并不理解的东西__mro__。这是代码片段。

代码片段 1:

输出 :

代码片段 2:当我在 B 类中更新我的超级时:

输出:

然后现在我得到了我之前的期望。有人可以解释一下 mro 如何与 super 一起工作吗?

0 投票
9 回答
7249 浏览

python - 在运行时更改 python mro

我发现自己处于一种不寻常的情况,我需要在运行时更改类的 MRO。

编码:

正如所料,这失败了,因为__init__A 的方法(当从 B 调用时)调用 B 的方法hello,它试图在属性存在之前访问它。

问题是我可以做出的改变受到限制:

  • B 必须是 A 的子类
  • A 不能改变
  • A 和 B 都需要一个 hello 方法
  • B在调用super之前不能初始化其他属性__init__

我确实通过在运行时更改 MRO 从概念上解决了这个问题。简而言之,在 B's 期间__init__,但在调用 super 之前__init__,将更改 MRO,以便首先搜索 A 的方法,从而调用 A'shello而不是 B's(因此失败)。

问题是 MRO 是只读的(在类运行时)。

还有其他方法可以实现吗?或者可能完全不同的解决方案(仍然尊重上述限制)?

0 投票
1 回答
156 浏览

python - 如何确保为层次结构中的每个类调用一个方法(一次,如果存在)?

我有一个类层次结构,其中子类可以选择定义一个具有给定名称的方法,比如do_it,并希望do_all在基类中编写一个函数,比如 ,以确保每个这样的方法都将按照类层次结构的顺序执行。我能达到的最接近的目标是:

这几乎可以按预期工作,例如B().do_all()给出

但它会导致对Bsdo_it的所有派生类的重复调用。例如D().do_all()给出

如何避免do_it从不实现它的类对父类的重复调用?这甚至是实现我想要做的事情的正确方法吗?

0 投票
2 回答
4891 浏览

python - Python和多重继承中的方法顺序

在 Python 中,如果您使用相同的方法定义两个类并打算将这两个类作为父类,如:

和:

当您定义子类并按A和B顺序添加两个父类时:

调用 self.method() 时使用的方法是属于 A 的方法,或者是继承列表中的第一个类:

虽然这在我所有的测试用例中似乎都是正确的,但我在文档或在线中找不到一个位置,它实际上在任何平台和语言实现中都是安全的。任何人都可以确认可以安全地假设列表中的第一个继承类将始终是在其他类上使用的方法(不管 super().__init__() 调用等),还是将我指向确认这一点的官方文档?

谢谢,

0 投票
0 回答
217 浏览

python - 超级(类型,对象或类型),MRO

为什么上面的代码打印:

而文档http://docs.python.org/2/library/functions.html#super说:

似乎使用的 MRO 不是 super() 的“类型”参数之一,而是“对象或类型”参数之一。这是 Python 文档中的错误吗?

0 投票
5 回答
172 浏览

python - 基类具有不同 init 参数的情况下的方法解析顺序

我正在尝试用 Python 理解 MRO。虽然这里有各种各样的帖子,但我并没有特别得到我想要的东西。考虑两个类AB派生自BaseClass,每个类都有__init__不同的参数。

问题是,如果我需要CA和派生第三类,如果必须的话,我B该如何初始化__init__?我可以安全地CB或派生A

上面的实现给了我一个错误。