- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在学习所有关于 Python 类的知识,而且我有很多基础知识要涵盖。我遇到了一个让我有点困惑的例子。
这些是父类
Class X
Class Y
Class Z
子类是:
Class A (X,Y)
Class B (Y,Z)
孙子类是:
Class M (A,B,Z)
Class M
不是通过继承Class B
来继承Class Z
的吗?或者说这种结构的原因是什么? Class M
会忽略第二次 Class Z
被继承,不是吗,还是我遗漏了什么?
最佳答案
Class M would just inherit the Class Z attributes twice (redundant) wouldn't it be, or am I missing something?
不,没有“重复的”属性,Python 执行线性化,它们可以方法解析顺序 (MRO),例如,说明 here .但是,您在此处添加 Z
是正确的到列表不会改变任何东西。
他们首先为 parent 构建 MRO,因此:
MRO(X) = (X,object)
MRO(Y) = (Y,object)
MRO(Z) = (Z,object)
MRO(A) = (A,X,Y,object)
MRO(B) = (B,Y,Z,object)
然后他们为 M
构建了一个 MRO通过合并:
MRO(M) = (M,)+merge((A,X,Y,object),(B,Y,Z,object),(Z,object))
= (M,A,X,B,Y,Z,object)
现在每次调用方法时,Python 都会首先检查该属性是否在内部字典中self.__dict__
该对象)。否则,Python 将遍历 MRO 并尝试查找具有该名称的属性。从找到一个的那一刻起,它将停止搜索。
最后super()
是一个执行相同解析的代理对象,但在类的阶段在 MRO 中启动。所以在这种情况下,如果你有:
class B:
def foo():
super().bar()
然后你构造了一个对象m = M()
并调用m.foo()
然后 - 给定 foo()
的 B
被称为,super().bar
将首先尝试找到 bar
在 Y
,如果失败,它将寻找 bar
在 Z
最后在 object
.
属性不会被继承两次。如果您添加如下属性:
self.qux = 1425
然后它被简单地添加到内部self.__dict__
该对象的字典。
说明 Z
明确然而可能是有益的:如果 B
的设计师不确定是否Z
是一个真正的要求。在那种情况下,您肯定知道 Z
如果 B
仍将在 MRO 中被改变了。
关于python - 从父类继承的孙子 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42838923/
我需要索引 3 个级别(或更多)的子级-父级。例如,级别可能是一位作者、一本书和那本书中的角色。 但是,当索引超过两层时,has_child 和 has_parent 查询和过滤器会出现问题。如果我有
我制作了一个简单的 react 任务列表,它允许我添加新任务。我现在希望能够删除任务,但无法了解如何将函数属性传递给子/孙组件。 我想通过 deleteTaskFromState函数属性一直到 成分。
我正在循环属于 frag 的 span 元素类(class)。我想检测当前所在的frag元素是否是属于frag的a span元素的最小儿子/孙子/孙子(从左到右)类并属于 cond类,并且在其文本中有
在处理命令行的 JavaFX 模型时,我遇到了以下问题: 如果我运行一个运行另一个进程的进程(例如批处理文件)(例如使用简单的 start notepad 打开记事本)我似乎无法正确确定批处理文件何时
我正在 linux (Ubuntu) 上做一个小项目,我需要一个人通过身份验证才能访问服务。我的想法是,此身份验证应与进程及其子进程一起存储,而不是与 linux 用户本身一起存储。 此身份验证应通过
假设我有一个像这样的模板模态 react 组件(经过简化以使我的问题更清晰): function Modal(props) { const hide=()=>{ documen
过去 2 小时在网上搜索这个。任何帮助是极大的赞赏。 场景是这样的,我们有一个Questionnaire,有Steps,每个step都有input sets,每个input set有questions
我正在尝试解析编码不当的 XML 并输出标签的节点名称和内容(仅当它存在时),并且仅当字符串名称=内容 > 30 天时。 到目前为止,我可以使用 ElementTree 搜索子元素,但我需要有关嵌套信
我正在进行一个小实验。我正在尝试使用 :focus 创建一个没有 javascript 的 onclick 菜单。我遇到的问题是孙子,单击它仍然会关闭父级。我尝试使用 ~ 选择器使其保持打开状态,但它
我有一个 3 个数据库设置,例如父->子->孙,到目前为止,我可以设法获取特定父级的子级,但无法深入到另一个级别。 class Parent : Object { @objc dynamic
ver data = [ {"id": 1,"parent": 0,"name": "Parent"}, {"id": 2,"parent": 1,"name": "Child"},
我是一名优秀的程序员,十分优秀!