Как передать значение из одной функции в другую с dataclass?
Как передать значение из одной функции в другую с dataclass?
from src.centrifugal_injector_calc import Injector
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
)
@property
def determining_value(self):
"""Возвращает название переменной в которой присутствует недопустимое значение"""
return 0
@property
def checking_zero_value(self):
"""Возвращает сообщение об ошибке в случае если в словаре common будут найдены параметры со значением 0"""
for key, value in self.common.items():
if value == 0:
raise ValueError(f"Введеное значение {self.determining_value} равняется 0, измените значение"
f"переменной на допустимое")
Есть вот такой код, и нужно передать значение key
из функции checking_zero_value
в функцию determining_value
. Как это сделать?
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Убираете декоратор @property
, и вызываете determining_value
просто как метод. При вызове в него передаете значение key
(нужно добавить соответствующий параметр в сам метод, не убирая self
):
@dataclass(frozen=True, slots=True)
class InjectorRange:
...
def determining_value(self, key):
"""Возвращает название переменной в которой присутствует недопустимое значение"""
return 0
@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"переменной на допустимое")
Если результат метода никак от self
не зависит, можно объявить метод статическим, и self
убрать:
@dataclass(frozen=True, slots=True)
class InjectorRange:
...
@staticmethod
def determining_value(key):
"""Возвращает название переменной в которой присутствует недопустимое значение"""
return 0
@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"переменной на допустимое")
Статический метод — это по сути отдельная функция (не зависящая от объекта или класса), но почему-то программист решил, что по смыслу она относится к классу, и есть смысл ее поместить в класс.