问题标签 [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.
java - Java继承和方法解析顺序
我有以下代码示例:
调用以下行:
理解为什么“cp.druckauftrag();”没有问题 导致控制台输出“彩色打印机”。
但是当我打电话时:
我得到相同的输出 - 为什么?类型转换是否用 colorprinter 中的“drucker”覆盖对象“drucker”的方法“drucker”?
预先感谢您的每一个解释。
python - super() 和 Parent 类名有什么区别?
super()
直接使用和直接使用父类名有区别吗?例如:
super().__init__()
和内部有区别Parent.__init__(self)
吗?
python - 钻石继承和 MRO
我是 MRO 的新手,在弄清楚这些输出的逻辑时遇到了问题。
情况1:
输出:
我的问题是如何super(C)
调用B.save()
.
根据 MRO:super(C, self)
不是关于“基类C
”,而是关于 .MRO 列表中的下一个类C
。但是B
在 MRO 列表中没有C
.
案例二:
输出:
案例3:
输出:
问题
如果B
不是从 继承A
,而是object
直接继承,MRO 会受到怎样的影响?
有人可以解释这背后的原因吗?
python - 什么在 CPython 中调用 `mro_internal()`?
我正在研究对象是如何在 Python 中出现的,出于好奇,我已经了解了方法解析顺序。
在 Python 中,Cl
具有 base Ba
when 的类将具有属性__mro__
,包含(<class 'Cl'>, <class 'Ba'>, <class 'object'>)
. 元类可以定义mro()
,它将为__mro__
子类提供一个自定义元组,以便在定义时包含。
在 C 中,据我所知,这个赋值是由 处理的mro_internal
,但我看不到它是从哪里调用的。即使搜索也只会在测试中找到对它的引用。
将其表述为一个更可运行的问题;“如何在运行时重新定义实例的 MRO?”
python - 为什么我不能在这里访问 .__mro__ 属性?
我理解这段代码。我不明白为什么在执行此代码时会出现此错误:
python-3.x - mro:为什么调用两个父级的方法?
我在玩类,看看mro
在 python3 中是如何工作的。我得到了主要想法:方法从左到右解析,深度优先,如果有一个共同的父级,它就在最后。
这显然很简单,但不像我期望的那样:
现在,由于D -> B -> C -> A
我希望super
调用mroB.f
以便它打印:
但它实际上C.f
也调用:
这是为什么?
我希望C.f
不被调用的原因是因为B
作为方法f
,解析应该停止。如果C
不继承自,就是这种情况A
:
python-3.x - 更改方法解析顺序
是否可以更改方法解析顺序?
如果输入是“B”,我想更改 MRO name
,这样当我打电话时:
它返回“B 方法”。
谢谢
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 所说,必须有更好的方法。
python - Python 继承 - 在搜索 __mro__ 找到匹配项以及未找到匹配项时进行记录
在 Python 中,假设我有一个如下所示的基本类结构:
我了解该__mro__
属性的构造方式,但我想添加日志记录,以便在输出中查看每个类调用时它找到/调用的方法。因此,例如,我希望它记录如下评论:
我一直在摆弄__getattribute__
and __get__
,但显然我对这些方法的理解还不够好,无法按需要实现。我还研究了使用装饰器,但我认为以某种方式使用描述符可能是此处采用的路线。
这是我到目前为止所尝试的:
我也在__getattribute__
Foo 中重新定义了这个,我的输出如下:
因此,我能够在第一级继承捕获正确的日志记录,但无法正确地将调用从 Bar 传递回 Foo,以便我可以利用 Foo 的__getattribute__
.
python - Python 中的 MRO 无法按预期工作
我找到了一个多重继承的例子,但不明白它的行为方式。
该脚本存储在printable.py中,因此该类Printable
以这种方式使用:
我的问题是为什么方法是从类而不是类__str__
继承的,而方法解析顺序是:Printable
list
MySeq
在Printable
我注意到“mixin”这个词的文档字符串中。为什么在这种情况下我们称它为 mixin 类?