Python:当 class 在构建器外实例化时抛出警告
Python: Throw warning when class is instantiated outside builder
我有一个 class 构造函数变得过于复杂,所以我想使用构建器模式来管理所有构造步骤。
应用程序的一个重要部分依赖于实例化 class 的旧方法,所以我不能一次性全部替换它们。
我使用装饰器将某些方法标记为已弃用,但如果 class 在构建器 class.
之外实例化,我想发出警告
为了提供更多上下文,原始 class (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
然后通过其他方法将许多参数提供给 class,我们的想法是将这些值提供给构建器 class,例如:
inverter = InverterBuilder().set_id("some_id").build()
我最初的想法是向构造函数添加弃用警告,但这会使构建器也抛出警告。
那么,当从构建器 class 外部调用原始 class 构造函数时,有没有办法发出警告?
例如,如果有人这样做,则发出警告:
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
那么builder可以通过invokewarning=False
。
我想还有其他一些方法可以解决这个问题。
我有一个 class 构造函数变得过于复杂,所以我想使用构建器模式来管理所有构造步骤。
应用程序的一个重要部分依赖于实例化 class 的旧方法,所以我不能一次性全部替换它们。 我使用装饰器将某些方法标记为已弃用,但如果 class 在构建器 class.
之外实例化,我想发出警告为了提供更多上下文,原始 class (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
然后通过其他方法将许多参数提供给 class,我们的想法是将这些值提供给构建器 class,例如:
inverter = InverterBuilder().set_id("some_id").build()
我最初的想法是向构造函数添加弃用警告,但这会使构建器也抛出警告。
那么,当从构建器 class 外部调用原始 class 构造函数时,有没有办法发出警告?
例如,如果有人这样做,则发出警告:
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
那么builder可以通过invokewarning=False
。
我想还有其他一些方法可以解决这个问题。