You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

燃油喷油器计算代码优化及统一入口实现方案问询

喷油器计算代码优化方案

1. 搞定全局变量依赖问题

把原来散在全局的参数,用数据类封装成配置对象,所有计算类都通过构造函数接收这个配置,彻底摆脱全局变量污染:

from dataclasses import dataclass

@dataclass
class InjectorConfig:
    # 集中管理所有计算所需参数,添加类型提示明确含义
    flow_rate: float
    pressure: float
    fluid_density: float
    viscosity: float
    nozzle_diameter: float

这样每个计算实例的参数都是独立的,不会出现互相干扰的情况。

2. 重构类关系,复用通用逻辑

让LiquidJetInjector和GasJetInjector直接继承SimilarCalculations,不用先单独初始化通用类再实例化子类,逻辑更顺畅:

from enum import Enum

class Reynolds(Enum):
    CRITICAL = 2300
    TURBULENT = 4000

class SimilarCalculations:
    def __init__(self, config: InjectorConfig):
        self.config = config

    def calculate_reynolds_number(self) -> float:
        # 通用雷诺数计算逻辑
        return (self.config.fluid_density * self.config.flow_rate * self.config.nozzle_diameter) / self.config.viscosity

    def is_turbulent_flow(self) -> bool:
        return self.calculate_reynolds_number() > Reynolds.TURBULENT.value

class LiquidJetInjector(SimilarCalculations):
    def __init__(self, config: InjectorConfig):
        super().__init__(config)
        # 液体喷油器专属初始化逻辑写在这里

    def calculate_liquid_penetration(self) -> float:
        # 直接复用父类的通用计算方法
        reynolds = self.calculate_reynolds_number()
        return 0.1 * self.config.nozzle_diameter * (reynolds ** 0.5)

class GasJetInjector(SimilarCalculations):
    def __init__(self, config: InjectorConfig):
        super().__init__(config)
        # 气体喷油器专属初始化逻辑写在这里

    def calculate_gas_spread_angle(self) -> float:
        reynolds = self.calculate_reynolds_number()
        return 5.0 / (reynolds ** 0.2)

3. 创建统一入口,避免分别调用两类

写一个InjectorCalculator作为统一入口,用户只需要指定喷油器类型和配置,就能一键完成所有计算,不用关心背后的具体实现类:

class InjectorCalculator:
    def __init__(self, injector_type: str, config: InjectorConfig):
        self.injector_type = injector_type.lower()
        self.config = config
        self.injector = self._get_injector_instance()

    def _get_injector_instance(self):
        # 内部逻辑,用户无需关注
        if self.injector_type == "liquid":
            return LiquidJetInjector(self.config)
        elif self.injector_type == "gas":
            return GasJetInjector(self.config)
        else:
            raise ValueError(f"不支持的喷油器类型:{self.injector_type}")

    def get_calculation_results(self):
        # 统一返回所有计算结果
        results = {
            "雷诺数": self.injector.calculate_reynolds_number(),
            "是否湍流": self.injector.is_turbulent_flow()
        }
        if self.injector_type == "liquid":
            results["液体穿透率"] = self.injector.calculate_liquid_penetration()
        elif self.injector_type == "gas":
            results["气体扩散角"] = self.injector.calculate_gas_spread_angle()
        return results

使用示例

# 创建液体喷油器配置
liquid_config = InjectorConfig(
    flow_rate=0.01,
    pressure=1000000,
    fluid_density=800,
    viscosity=0.001,
    nozzle_diameter=0.001
)

# 统一入口调用,直接获取结果
liquid_calc = InjectorCalculator("liquid", liquid_config)
print(liquid_calc.get_calculation_results())

# 气体喷油器操作同理
gas_config = InjectorConfig(
    flow_rate=0.05,
    pressure=500000,
    fluid_density=1.2,
    viscosity=1.8e-5,
    nozzle_diameter=0.002
)
gas_calc = InjectorCalculator("gas", gas_config)
print(gas_calc.get_calculation_results())

4. 额外提升可读性的小技巧

  • 给所有方法添加类型注解,一眼就能明确输入输出类型。
  • 给类和方法加简短注释,说明核心功能,不用冗余描述。
  • 把复杂计算拆成小方法,避免单个方法代码过长,逻辑混乱。
  • 将Reynolds枚举类放在计算类附近,方便引用查找。

内容的提问来源于stack exchange,提问作者Андрей Александров

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:40:29