Python:在构建器外部实例化类时引发警告

问题描述 投票:0回答:1

我有一个构造函数过于复杂的类,因此我想使用构建器模式来管理所有构造步骤。

这是应用程序的重要组成部分,取决于实例化类的旧方法,因此我不能一口气替换掉它们。我已经使用装饰器将某些方法标记为已弃用,但是如果要在builder类之外实例化该类,我想发出警告。

为了提供更多的上下文,原始类(Inverter)的构造函数如下所示:

    def __init__(self, inverter_id: str, location: Tuple[str, str], plant_id: str,
                 customer_id: str, power_threshold: float = 0, resolution: int = 5,
                 **kwargs):
        """
        Creates a new inverter object.
        :param inverter_id:
            unique identifier of the inverter.
        """
        # metrics initialization
        self._customer_id = customer_id
        self._plant_id = plant_id
        self._expected_power = DataFrame()
        self._generated_power = DataFrame()
        self._total_pr = 0.0
        self._specific_performance = 0.0
        self._active_pr = 0.0
        self._generated_energy = 0.0
        self._expected_energy = 0.0
        self.__operational_time = {}
        self.__off_time = {}
        self.__savings = 0.0

        # parameters initialization
        self._power_threshold = power_threshold
        self._resolution = 5
        self._energy_rate = kwargs['energy_rate']
        self._lines = []
        # identification
        self._id = inverter_id
        self._location = location
        self._resolution = resolution

        # data storing
        self._inverter_electric_data = None
        self._inverter_environmental_data = None
        self._inverter_metadata = None

然后通过其他方法将许多参数提供给类,其想法是将这些值提供给构建器类,例如:

inverter = InverterBuilder().set_id("some_id").build()

我最初的想法是向构造函数添加弃用警告,但这也会使构建器也发出警告。

因此,当从构建器类的外部调用原始类的构造函数时,有没有办法引发警告?

例如,如果有人这样做,则发出警告:

inverter = Inverter(...)

作为附加说明,我正在使用deprecation库将方法标记为已弃用。

我有一个构造函数过于复杂的类,因此我想使用构建器模式来管理所有构造步骤。事物是应用程序的重要组成部分,取决于...

python refactoring deprecated builder-pattern
1个回答
0
投票

您的原始__init__已经接受了**kwargs参数-使用它。

© www.soinside.com 2019 - 2024. All rights reserved.