所以我有一个类(我们称之为ParamClass
),它需要一个参数进行初始化,这个参数应该可以通过一些选项设置界面供用户配置
ParamClass
对配置接口或如何读取它们一无所知。所以我创建了另一个类,名为Configurator
,它完成了所有这些。当类从Configurator
继承并告诉它要读取哪些配置键时,Configurator
的__init__()
方法将读取这些键并将它们的值分配给self
中的正确属性
然而,我遇到的问题是,当我尝试向super()传递参数时,包括Configurator
要读取的参数,这些参数还没有值。但是它们在参数列表中作为常量传递给super()
。示例如下所示MyClass.__init__()
甚至无法开始,因为self.server_param
还不存在
class ParamClass:
"""Just some class that needs a parameter for init"""
def __init__(self, param1, **kwargs) -> None:
super().__init__(**kwargs)
self.value = param1
class Configurator:
"""Reads parameters from a configuration source and sets appropriate class
variables.
"""
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.server_param = 2
class MyClass(Configurator, ParamClass):
def __init__(self, **kwargs) -> None:
super().__init__(param1=self.server_param, **kwargs)
# <-- Gives AttributeError: 'MyClass' object has no attribute 'server_param'
MyClass()
我能让它工作的唯一方法是在Configurator.init()
中打破MRO并强制初始化顺序。这是不好的,原因很明显-我计划在我的代码中使用Configurator
,不能用它破坏MRO
class ParamClass:
"""Just some class that needs a parameter for init"""
def __init__(self, param1, **kwargs) -> None:
super().__init__(**kwargs)
self.value = param1
class Configurator:
"""Reads parameters from a configuration source and sets appropriate class
variables.
"""
def __init__(self, **kwargs) -> None:
# super().__init__(**kwargs)
self.server_param = 2
class MyClass(Configurator, ParamClass):
def __init__(self, **kwargs) -> None:
Configurator.__init__(self, **kwargs)
# <-- After this call, self.server_param is defined.
ParamClass.__init__(self, param1=self.server_param, **kwargs)
MyClass()
如何在while usersuper
中完成参数配置?我如何以一种不需要Configurator
了解ParamClass
的小细节的通用方式来实现这一点
注意:在我的特殊情况下,我不“拥有”这个ParamClass()
代码。我正在使用的是库代码
目前没有回答
相关问题 更多 >
编程相关推荐