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

java - Java继承和方法解析顺序

我有以下代码示例:

调用以下行:

理解为什么“cp.druckauftrag();”没有问题 导致控制台输出“彩色打印机”。

但是当我打电话时:

我得到相同的输出 - 为什么?类型转换是否用 colorprinter 中的“drucker”覆盖对象“drucker”的方法“drucker”?

预先感谢您的每一个解释。

0 投票
2 回答
10040 浏览

python - super() 和 Parent 类名有什么区别?

super()直接使用和直接使用父类名有区别吗?例如:

super().__init__()和内部有区别Parent.__init__(self)吗?

0 投票
1 回答
1351 浏览

python - 钻石继承和 MRO

我是 MRO 的新手,在弄清楚这些输出的逻辑时遇到了问题。

情况1:

输出:

我的问题是如何super(C)调用B.save().

根据 MRO:super(C, self)不是关于“基类C”,而是关于 .MRO 列表中的下一个类C。但是B在 MRO 列表中没有C.

案例二:

输出:

案例3:

输出:

问题

如果B不是从 继承A,而是object直接继承,MRO 会受到怎样的影响?

有人可以解释这背后的原因吗?

0 投票
0 回答
51 浏览

python - 什么在 CPython 中调用 `mro_internal()`?

我正在研究对象是如何在 Python 中出现的,出于好奇,我已经了解了方法解析顺序。

在 Python 中,Cl具有 base Bawhen 的类将具有属性__mro__,包含(<class 'Cl'>, <class 'Ba'>, <class 'object'>). 元类可以定义mro(),它将为__mro__子类提供一个自定义元组,以便在定义时包含。

在 C 中,据我所知,这个赋值是由 处理的mro_internal,但我看不到它是从哪里调用的。即使搜索也只会在测试中找到对它的引用。

将其表述为一个更可运行的问题;“如何在运行时重新定义实例的 MRO?”

0 投票
1 回答
4424 浏览

python - 为什么我不能在这里访问 .__mro__ 属性?

Raymond Hettinger 的收据示例

我理解这段代码。我不明白为什么在执行此代码时会出现此错误:

0 投票
1 回答
46 浏览

python-3.x - mro:为什么调用两个父级的方法?

我在玩类,看看mro在 python3 中是如何工作的。我得到了主要想法:方法从左到右解析,深度优先,如果有一个共同的父级,它就在最后。

这显然很简单,但不像我期望的那样:

现在,由于D -> B -> C -> A我希望super调用mroB.f以便它打印:

但它实际上C.f也调用:

这是为什么?

我希望C.f不被调用的原因是因为B作为方法f,解析应该停止。如果C不继承自,就是这种情况A

0 投票
1 回答
459 浏览

python-3.x - 更改方法解析顺序

是否可以更改方法解析顺序?

如果输入是“B”,我想更改 MRO name,这样当我打电话时:

它返回“B 方法”。

谢谢

0 投票
1 回答
1434 浏览

python - 如何从多个父类继承同名变量?

我遇到了一些关于 python 的多重继承的问题。

变量路径将存储母亲和父亲的文件目录。当我打印出父亲和母亲的词典时,我注意到母亲词典不知何故从父亲那里获取了所有信息。在阅读了 Guido 关于 MRO 的博客http://python-history.blogspot.com/2010/06/method-resolution-order.html并观看了 Raymond Hettinger 的 2015 PyCon 视频超级棒后,我意识到 TestChild 类只继承了路径来自 TestFather 的变量,并完全忽略来自 TestMother 的路径变量。

我的问题是,TestChild 有没有办法使用其两个父母各自的路径,而不是只采用具有更高 MRO 的路径。我知道更改变量名可以解决问题,但正如 Raymond 所说,必须有更好的方法。

0 投票
1 回答
119 浏览

python - Python 继承 - 在搜索 __mro__ 找到匹配项以及未找到匹配项时进行记录

在 Python 中,假设我有一个如下所示的基本类结构:

我了解该__mro__属性的构造方式,但我想添加日志记录,以便在输出中查看每个类调用时它找到/调用的方法。因此,例如,我希望它记录如下评论:

我一直在摆弄__getattribute__and __get__,但显然我对这些方法的理解还不够好,无法按需要实现。我还研究了使用装饰器,但我认为以某种方式使用描述符可能是此处采用的路线。

这是我到目前为止所尝试的:

我也在__getattribute__Foo 中重新定义了这个,我的输出如下:

因此,我能够在第一级继承捕获正确的日志记录,但无法正确地将调用从 Bar 传递回 Foo,以便我可以利用 Foo 的__getattribute__.

0 投票
1 回答
151 浏览

python - Python 中的 MRO 无法按预期工作

我找到了一个多重继承的例子,但不明白它的行为方式。

该脚本存储在printable.py中,因此该类Printable以这种方式使用:

我的问题是为什么方法是从类而不是类__str__继承的,而方法解析顺序是:PrintablelistMySeq

Printable我注意到“mixin”这个词的文档字符串中。为什么在这种情况下我们称它为 mixin 类?