Как определить какой параметр из словаря используется?
Есть код, в котором присутствует словарь common
со следующим содержанием:
common = {
"outer_diameter_injector": 1,
"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"
}
Мне нужно чтобы программа понимала какой параметр сейчас использует программа. Пример: в переменной value хранится параметр outer_diameter_injector
, мне нужно отследить, что это именно он и вывести "test"
Я пытаюсь сделать это так:
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 checking_zero_value(self):
"""Возвращает сообщение об ошибке в случае если в словаре common будут найдены параметры со значением 0"""
for key, value in self.common.items():
if value == 0:
raise ValueError(key)
Но в таком случае можно получить только:
<property object at 0x000001F243800360>
Как это исправить?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Потому что вы проверяете свойство у класса, а нужно - у экземпляра класса:
InjectorRange().checking_zero_value
Вывод:
36 for key, value in self.common.items():
37 if value == 0:
---> 38 raise ValueError(key)
ValueError: outer_diameter_injector
Но, вообще говоря, не очень понятно, зачем вам тут property
, если вы хотите вызвать метод, а не получить или установить какое-то значение.