如何优化含大量范围常量的离心式液体喷射器校验代码?
离心式液体喷射器代码优化方案
问题分析
原代码用多个Enum类存储单个参数的范围阈值,导致类冗余;同时校验逻辑重复,还存在范围引用错误(比如切向输入孔数量的上限错误引用了直径的最大值),维护成本高。
优化思路
- 集中管理阈值:用单个数据类替代多个
Enum,统一存储所有参数的范围约束,更直观且易修改。 - 提取通用校验逻辑:封装重复的范围校验代码,避免重复编写条件判断和错误信息。
- 修复逻辑错误:修正原代码中范围引用的错误。
优化后代码
from dataclasses import dataclass, frozen_dataclass @frozen_dataclass class InjectorSpecifications: """统一存储离心式喷射器的参数范围阈值""" # 切向输入孔数量 min_input_holes: int = 2 max_input_holes: int = 6 # 切向输入孔直径 min_hole_diameter: float = 0.5 max_hole_diameter: float = 2.5 # 切向输入孔相对长度 min_relative_length: float = 1.5 max_relative_length: float = 6.0 # 全局使用的规格实例,可根据需求修改 INJECTOR_SPECS = InjectorSpecifications() def validate_parameter_range(value: float | int, min_val: float | int, max_val: float | int, param_name: str) -> None: """通用参数范围校验函数""" if not (min_val <= value <= max_val): raise ValueError(f"参数「{param_name}」的值{value}不在允许范围内 [{min_val}...{max_val}]") @dataclass(frozen=True, slots=True) class CentrifugalLiquidInjector: outer_diameter_injector: float side_wall_thickness_injector: float number_input_tangential_holes: int # 数量应为整数,原代码用float不合理,修正类型 diameter_input_tangential_holes: float length_input_tangential_holes: float relative_length_twisting_chamber: float def __post_init__(self): # 校验切向输入孔数量 validate_parameter_range( self.number_input_tangential_holes, INJECTOR_SPECS.min_input_holes, INJECTOR_SPECS.max_input_holes, "切向输入孔数量" ) # 校验切向输入孔直径 validate_parameter_range( self.diameter_input_tangential_holes, INJECTOR_SPECS.min_hole_diameter, INJECTOR_SPECS.max_hole_diameter, "切向输入孔直径" ) @property def diameter_twisting_chamber_injector(self) -> float: return self.outer_diameter_injector - 2 * self.side_wall_thickness_injector @property def relative_length_tangential_hole(self) -> float: value_relative_length = self.length_input_tangential_holes / self.diameter_input_tangential_holes # 校验相对长度 validate_parameter_range( value_relative_length, INJECTOR_SPECS.min_relative_length, INJECTOR_SPECS.max_relative_length, "切向输入孔相对长度" ) return value_relative_length
优化亮点
- 阈值集中管理:所有约束都在
InjectorSpecifications中,修改阈值只需改动这一个类,无需找多个Enum。 - 消除重复代码:通用校验函数
validate_parameter_range避免了重复编写条件判断和错误信息,代码更简洁。 - 修复逻辑错误:原代码中切向输入孔数量的上限错误引用了直径最大值,优化后已修正。
- 类型合理性修正:切向输入孔数量应为整数,原代码用
float类型不合理,已调整为int。
内容的提问来源于stack exchange,提问作者DYNAMIC AEROSPACE
相关产品推荐
相关产品推荐

