Как определить какой параметр из словаря используется?

Есть код, в котором присутствует словарь 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, если вы хотите вызвать метод, а не получить или установить какое-то значение.

→ Ссылка