Как улучшить код несколькими классами?
Есть код, в котором производятся определенные расчеты, для удобство каждый блок расчетов представляет собой отдельный класс, а промежуточные параметры функции. Некоторые функции выделены в третий класс, так как они используются во всех расчетах. Но в таком случаи получается так, что бы запустить расчет, требуется активация двух классов, как можно решить это?
Я думаю создать класс, в который будут загружаться все данные, а уже он распределит их по остальным, но думаю найдутся решения и получше
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 шт):
Лучше улучшить одним классом. Зачем плодить лишнее, если нет никаких идей по классификации?
А так-то ООП предполагает композицию в классе данных и методов для их обработки. Если сможете таким образом разбить данные и функции по классам, то и разбивайте.