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

python - 在python中具有多重继承的MRO

Python 网页上的文档中,python 中经典类的方法解析顺序被描述为深度优先从左到右搜索。我试图用这段代码对此进行测试:

当我创建对象 D 的实例时:

我得到结果:

虽然我期望打印“Initialized A”、“Initialized D”,因为 MRO 是深度优先的,但首先在 B 中搜索初始化,当未找到时(就是这种情况),它应该在层次结构中更深入并寻找B(即A)的基类中的函数。有人可以解释一下为什么我得到 C 的 init 函数而不是 A 的那个吗?

0 投票
1 回答
72 浏览

python - Beazley 4e PER pg 135,136:对于 sub.mro 中的 c?

IClass 的最后一行到底是做什么的?

subclasscheck重载 subclasscheck 但是,通常在重载运算符时,我们会执行以下操作:

adt + 4.0 在这里,adt 是用户定义的类型 = 用户类对象(实例),而 4.0 是一个内置类型,预配置了 .real, .imaginary 所以如果 adt 很复杂,那么它变成: adt.(self, other ) add (self, other) 因此生成对“adt”的引用并将其提供给“self”,而“other”指的是 4.0

但在下面的例子中:

这里subclasscheck的 self 和 sub 是什么?subclasscheck是如何 重载的?

无论如何,假设它以某种方式被重载.. 对 FooProxy 的引用被传递给 self 和 IFoo->sub。所以.. IFoo.mro() 将生成例如 IFoo 的方法解析顺序,因此对于 IClass.. 这将只是 object.. umm.. wth??

有人可以解释这里发生了什么吗?如果 FooProxy 是 IClass 中分组类的子类,则基本上“任何”都应该返回 True。

0 投票
1 回答
228 浏览

c++ - 为什么我不能使用 using 来消除基本成员变量之间的歧义?

在这个简单的类层次结构中,我试图让 C 类通过告诉它“使用 B::x”来消除使用哪个 x 的歧义,但这不能在 G++ 中编译,因为它仍然无法弄清楚我的意思是哪个 x函数 foo。我知道 using 可用于提升隐藏方法,但为什么不能使用变量?我考虑过将 X 类作为 A 和 B 的虚拟基础,并为 X 定义,但这并不是我想要的;我想要的是 A:x 直接从它派生的东西使用,除了从 B 派生时,有点像 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

0 投票
2 回答
1038 浏览

python - Python 2.7 方法解析顺序覆盖

我在 Python 中使用多重继承时遇到了一些问题,无法理解我做错了什么。

我有三个类 A、B、C 定义如下,它不起作用。

对于 A 和 BI 没有任何问题。

我想创建一个继承自 A 和 B 的第三个类 C,以便我可以使用 B 中定义的酷方法,但想使用 A 中定义的构造函数。

尝试定义class C(A,B)不起作用,因为未定义 MRO。

但是定义class C(B,A)不允许我使用 A. init而不是 B. init

我该如何解决这个问题?

0 投票
2 回答
264 浏览

python - Python:检查多重继承中类的顺序

在我的框架中,我必须确保当一个类从 ClassA 继承时,它也必须从 ClassB 继承,ClassB 跟在 ClassA 之后(为了使被覆盖的方法[在 Django 表单中])。例如

有没有办法让 ClassA 检查它是否跟在 ClassB 后面(在启动时或运行时)?

0 投票
2 回答
3181 浏览

python - 为什么 __mro__ 没有出现在 dir(MyClass) 中?

输出:

为什么__mro__没有列出来dir()

0 投票
2 回答
353 浏览

python - 如果在层次结构中混合新旧样式类会发生什么?

假设你有类似的东西

当您具有混合层次结构时,python 相对于继承和方法解析顺序的行为如何?它是否遵循旧遍历,新遍历,两者的混合,这取决于层次结构的哪个分支正在行走?

0 投票
1 回答
2265 浏览

python - 为什么在父类 __init__() 中调用 super() 会改变子类 __init__() 的行为?

我一直在尝试理解super()多重继承上下文中的行为。我很困惑为什么super()test2.py 中父类中的调用会导致__init__()父母双方都被调用?

测试1.py

产生:

测试2.py

产生:

0 投票
1 回答
269 浏览

python - Python MRO 和通过 super() 传递 kwargs

我在 Ubuntu 13.04 上使用 Python 2.7。我正在构建一系列计划任务以将一些数据上传到第 3 方 API。我正在尝试以通用方式构建任务,以便我们以后可以轻松添加更多任务。在这样做的过程中,我使用了一些无法按预期方式工作的继承技术。我认为 MRO 非常简单,但我一定做错了什么,因为我global name 'UpdateBase' is not defined在尝试初始化任务时遇到了问题。

下面是我正在使用的继承结构。

关于我为什么会收到此错误的任何建议?

编辑1:

似乎是其他原因造成了这种情况NameError。我已经建立了几个层次结构来测试这个 MRO。我已经测试了我能想到的所有方法,一切都很好。如果有人能想到我可以检查、更改或包含的任何内容以提供帮助,我将不胜感激。

测试代码的一个例子:

0 投票
1 回答
553 浏览

python - 理解python中的mro和super()

我了解MRO是在类层次结构中找到属性的顺序。

如果我在 myInstance.foo 中使用属性 'foo',将使用在 MRO 中找到的第一个 foo。
并且查找通常会停止。

现在,假设 bar() 利用super().
由于super()返回 MRO 中的下一个基本实例,myInstance.bar() 将调用其层次结构链中的所有 bar()。

如果所有超类的 bar() 也调用 super().bar(),
则 bar() 将按照 MRO 指定的顺序被调用。

我是否正确理解它们?