问题标签 [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.
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。
python - “mro()”是做什么的?
在django.utils.functional.py
:
我不明白mro()
。它有什么作用,“mro”是什么意思?
python - 隐式调用父类初始化器
在上面的代码中,注释掉的__init__
调用似乎是进行超类初始化的普遍接受的“智能”方式。但是,如果类层次结构可能发生变化,我一直在使用未注释的形式,直到最近。
似乎在调用B
上述层次结构中的超级构造函数时,B.__init__
再次调用self.__class__
它实际上是C
,而不是B
我一直假设的那样。
Python-2.x 中是否有某种方法可以在调用超级构造函数而不命名当前类(B
in in )时维护正确的 MRO(关于以正确的顺序初始化所有父类super(B, self).__init__(1, b, c)
)?
c++ - C++ 中的方法解析顺序
考虑以下类层次结构:
- 具有虚方法 foo() 的基类 Object
- 具有多重继承(虚拟和非虚拟)的任意层次结构;每个类都是 Object 的子类型;其中一些覆盖 foo(),一些没有
- 此层次结构中的类 X,不覆盖 foo()
如何确定在 C++ 中对 X 类的对象调用 foo() 时将执行哪个方法?
(我正在寻找算法,而不是任何特定情况。)
python - Python中类的前向声明
以下程序可以成功运行:
我想将 、 和 的定义保留Simple
在Composite
三个__main__
不同的文件中,但我不能这样做,因为我无法导入Simple
,composite.py
也无法Composite
导入simple.py
.
您将如何修改类定义以便可以保留单独的文件?
谢谢你。
PS。我已经阅读了几个与“前向声明”相关的答案,但找不到我的具体问题的答案。
c# - 基类型的方法解析
我的情况是这样的:
那么当我调用时调用了哪个方法InheritedClassInstance.SomeMethod
?它是调用InheritedClassInstance.AnotherMethod
还是 BaseClass 的AnotherMethod
?
perl - 为什么此方案会出现错误“C3 合并期间层次结构不一致”?
以及——如果有的话——我能做些什么呢?
好的,我知道
Win32
继承自Unix
,但是调度是Win32 -> Unix
并且我希望Unix
实现作为默认值,直到我覆盖它并调度到我自己的 Win32 实现。我也明白,因为
File::Spec::x
只是传递类名,继承不是一个大问题,但我想知道如果我真的需要一些类来协调这种方式会发生什么。
python - 为什么 MyClass.__class__ 返回的值与 MyClass().__class__ 不同?
我希望能够调用'person.Person。class ' 并返回 'class person.Person',就像对 person 对象所做的那样:
这是 Person 继承树...
这里发生了什么?
django - django add_to_class() 使模型继承/MRO 工作错误
通过 add_to_class() 添加字段时,我的模型继承存在问题。我有一个模型File(models.Model)
-Image(File)
这些来自 django-filer。
在我的应用程序中,我正在导入它们并添加字段和方法:
图像应该继承这两者,但它只获取方法,而不是字段:
有什么线索吗?
python - Python 3 内置类型 __init__ 不调用 super().__init__?
从内置类型以及其他类派生时,似乎内置类型的构造函数不调用超类构造函数。这导致 __init__ 方法不会被 MRO 中内置函数之后的类型调用。
例子:
在此示例中,从未调用 A.__init__。当 B 被定义为class B(A, list)
——切换继承顺序——它按预期工作(即 A.__init__ 被调用)。
这种对继承顺序的非常微妙的依赖似乎相当不符合pythonic,是这样打算的吗?这也意味着您绝不能从复杂类层次结构中的内置类型派生,因为当其他人从您的类派生时,您无法知道内置类型在 MRO 中的最终位置(维护恐惧)。我错过了什么吗?
额外信息:Python 3.1 版