Аргумент функции зависящий от флага
Например нужно найти массовый расход через трубопровод для жидкости и газа. Где-то ранее объявлен класс Fluid со свойством density и другими такими, что создание класса Gas не будет подразумевать наследование Fluid. Тогда класс Gas будет иметь своё свойство density.
Тогда получается так:
v = velocity # не является свойством какого-либо из классов
F = section_area # не является свойством какого-либо из классов
def fluid_mass_flow(fluid):
return fluid.density * v * F
def gas_mass_flow(gas):
return gas.density * v *F
Это очевидно дублирование кода (по сути это методы классов). Есть ли способ с помощью какого-то флага принимать какой класс я хочу использовать и уже для него определять расход? Что-то вроде q = mass_flow("working mass").
Либо я неверно создал класс, но подразумевается, что площадь поперечного сечения и скорость не являются свойствами этих рабочих тел.
Ответы (1 шт):
Если интерфейсы объектов совместимы, то всеравно что вы там передаете.
def mass_flow(gas_or_fluid):
return gas_or_fluid.density * v *F
Если интерфейсы не совместимы, то isinstace
def mass_flow(gas_or_fluid):
if isinstace(gas_or_fluid, GasClass):
return gas_or_fluid.density * v *F
elif isinstace(gas_or_fluid, FluidClass):
return gas_or_fluid.density * u *F