gpt4 book ai didi

Python:在构建器外部实例化类时抛出警告

转载 作者:行者123 更新时间:2023-12-01 00:01:20 24 4
gpt4 key购买 nike

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

事情是应用程序的一个重要部分依赖于实例化类的旧方法,所以我不能一次性将它们全部替换。我已使用装饰器将某些方法标记为已弃用,但如果在构建器类之外实例化该类,我想发出警告。

为了提供更多上下文,原始类 (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 库将方法标记为已弃用。

最佳答案

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

...
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.
"""
...
if kwargs.get('invokewarning',True):
#issue warning

然后构建器可以传递invokewarning=False

我想还有其他一些方法可以解决这个问题。

关于Python:在构建器外部实例化类时抛出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60343235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com