首页 > 解决方案 > 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 类的属性......因此导致在以下键/值查找中:

  1. 获取整个配置
  2. 获取哺乳动物值(这是另一个配置/字典)
  3. 获得人的价值(类型无关紧要)

问题:当我实例化 C 类时,它应该在实例化时传播到 A 类。A 类的配置设置正确。然后,在 B 类中,当我引用该 super().configuration 时,它最终返回我的 CHILD (class C) 的配置。

例如,如果我将这一行放在B 类的init中,并让实例化从实例化类 C 执行:

print(self.configuration) 它将返回给我人类字典的值,而不是我想要的哺乳动物字典。


这是我在实例化 C 类时传入的配置示例:

config = {
   'mammals': {
      'human': {
         ...
      }
      ...
   }
   ...
}
exampleInstantiation = C(configuration=config)

我一直在尝试查找线性继承,类方法解析的顺序,但我找不到任何可以让我了解为什么 MIDDLE 类被子类覆盖的东西。

任何帮助表示赞赏。

标签: pythonpython-3.xinheritanceproperties

解决方案


推荐阅读