Как улучшить код несколькими классами?

Есть код, в котором производятся определенные расчеты, для удобство каждый блок расчетов представляет собой отдельный класс, а промежуточные параметры функции. Некоторые функции выделены в третий класс, так как они используются во всех расчетах. Но в таком случаи получается так, что бы запустить расчет, требуется активация двух классов, как можно решить это?

Я думаю создать класс, в который будут загружаться все данные, а уже он распределит их по остальным, но думаю найдутся решения и получше

import math
from enum import Enum
from functools import lru_cache

# Функции используются в обоих классах
class SimilarCalculations:
    def __init__(self, diameter: float, length: float, mass_flow_rate: float, viscosity: float, density: float):
        self.diameter = diameter
        self.length = length
        self.mass_flow_rate = mass_flow_rate
        self.viscosity = viscosity
        self.density = density

    @lru_cache(maxsize=None)
    def injector_nozzle_area(self) -> float:
        return (math.pi * self.diameter ** 2) / 4

    @lru_cache(maxsize=None)
    def reynolds_number(self) -> float:
        return (4 * self.mass_flow_rate) / (math.pi * self.diameter * self.viscosity)

    @lru_cache(maxsize=None)
    def average_speed(self) -> float:
        return self.mass_flow_rate / (self.density * self.injector_nozzle_area())

# Класс констант 
class Reynolds(Enum):
    LAMINAR = 2000
    TURBULENT = 10000


class LiquidJetInjector:
    def __init__(self, density_comb: float, sigma_fuel: float):
        self.calculations = SimilarCalculations(diameter, length, mass_flow_rate, viscosity, density)

        ...


class GasJetInjector:
    def __init__(self, combustion_pressure: float, pressure_drop_internal_circuit: float, gas_constant_gen_gas: float,
                 temperature_gen_gas: float):
        self.calculations = SimilarCalculations(diameter, length, mass_flow_rate, viscosity, density)

        ...

Ответы (1 шт):

Автор решения: rotabor

Лучше улучшить одним классом. Зачем плодить лишнее, если нет никаких идей по классификации?

А так-то ООП предполагает композицию в классе данных и методов для их обработки. Если сможете таким образом разбить данные и функции по классам, то и разбивайте.

→ Ссылка