Как можно упростить такой код с match?
Есть код в котором необходимо при получении определенного значения в переменной key
вывести определенный результат, я решил это с помощью match
, но получилось как по мне громоздко, можно ли улучшить код и сделать его более компактным?
from dataclasses import dataclass
@dataclass(frozen=True, slots=True)
class InjectorRange:
common = {
"outer_diameter_injector": 0,
"side_wall_thickness_injector": 1,
"number_input_tangential_holes": 1,
"diameter_input_tangential_holes": 1,
"length_input_tangential_holes": 1,
"relative_length_twisting_chamber": 1,
"diameter_injector_nozzle": 1,
"relative_length_injector_nozzle": 1,
"angle_nozzle_axis": 1,
"mass_flow_rate": 1,
"viscosity": 1,
"cross_sectional_area_one_passage_channel": 1,
"density_fuel_component_front_injector": 1,
"density_combustion_products": 1,
"surface_tension_coefficient": 1,
"injector_type": "CENTRIFUGAL"
}
centrifugal_injector = Injector(
**common
)
@staticmethod
def determining_value(key):
"""Возвращает название переменной в которой присутствует недопустимое значение"""
match key:
case "outer_diameter_injector":
return ""
case "side_wall_thickness_injector":
return ""
case "number_input_tangential_holes":
return ""
case "diameter_input_tangential_holes":
return ""
case "length_input_tangential_holes":
return ""
case "relative_length_twisting_chamber":
return ""
case "diameter_injector_nozzle":
return ""
case "relative_length_injector_nozzle":
return ""
case "angle_nozzle_axis":
return ""
case "mass_flow_rate":
return ""
case "viscosity":
return ""
case "cross_sectional_area_one_passage_channel":
return ""
case "density_fuel_component_front_injector":
return ""
case "density_combustion_products":
return ""
case "surface_tension_coefficient":
return ""
@property
def checking_zero_value(self):
"""Возвращает сообщение об ошибке в случае если в словаре common будут найдены параметры со значением 0"""
for key, value in self.common.items():
if value == 0:
raise ValueError(f"Введеное значение {self.determining_value(key)} равняется 0, измените значение"
f"переменной на допустимое")
print(InjectorRange().checking_zero_value)
Ответы (1 шт):
Автор решения: Allito
→ Ссылка
Вместо конструкции match надо написать:
return InjectorRange.common[key]
если я правильно понимаю, что в словаре common значения являются нужным ответом