python - Python 线性继承,中间类被 super() 属性调用的子类覆盖
问题描述
我有这样的课程设置:
class A(object):
__configuration = {}
def __init__(self, configuration: dict = {}):
A.__configuration = configuration
@property
def configuration(self):
return A.__configuration
class B(A):
def __init__(self, configuration: dict = {}):
super().__init__(configuration=configuration)
@property
def configuration(self):
return super().configuration.get('mammals')
class C(B):
def __init__(self, configuration: dict = {}):
super().__init__(configuration=configuration)
@property
def configuration(self):
return super().configuration.get('human')
现在,我遇到了一些我无法解决的问题。
当我实例化类 C 时,它会调用类 B 的超级初始化。然后,类 B 又调用类 A 的超级初始化。
配置将被设置为类 A 中的类变量,调用时的属性方法将返回该配置/字典/类变量。
BI 类试图让配置属性获取超级(A 类)配置,然后从中检索“哺乳动物”值。
C 类然后我试图(当从 C 类调用时)从它的父类获取“人类”值,这将调用 B 类的属性,我希望它会反过来调用 A 类的属性......因此导致在以下键/值查找中:
- 获取整个配置
- 获取哺乳动物值(这是另一个配置/字典)
- 获得人的价值(类型无关紧要)
问题:当我实例化 C 类时,它应该在实例化时传播到 A 类。A 类的配置设置正确。然后,在 B 类中,当我引用该 super().configuration 时,它最终返回我的 CHILD (class C) 的配置。
例如,如果我将这一行放在B 类的init中,并让实例化从实例化类 C 执行:
print(self.configuration) 它将返回给我人类字典的值,而不是我想要的哺乳动物字典。
这是我在实例化 C 类时传入的配置示例:
config = {
'mammals': {
'human': {
...
}
...
}
...
}
exampleInstantiation = C(configuration=config)
我一直在尝试查找线性继承,类方法解析的顺序,但我找不到任何可以让我了解为什么 MIDDLE 类被子类覆盖的东西。
任何帮助表示赞赏。
解决方案
推荐阅读
- r - 遍历名称特定列以检查值(下一级)
- emacs - elfeed-web 通过 API 公开未读项目计数器
- export - 为导出变量添加 git bash 冒号
- node.js - RabbitMQ 心跳超时问题
- performance - FabricJS 自由绘图性能提示?
- linux - ubuntu 18.04 太长了
- dataframe - 根据pyspark中的多个条件删除行
- android - Delphi 10.3 CE 关于 Android 应用程序开发
- java - 添加 jnpclient maven 依赖项时 Spring Boot 应用程序卡住
- postgresql - 如何将 PSQl 查询转换为聚合 2 个表的 KnexJS