使用在子类_uinit__;()中设置的参数调用super()?

2024-05-19 10:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个类(我们称之为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()代码。我正在使用的是库代码


Tags: 代码selfnone参数serverparaminitdef

热门问题