gpt4 book ai didi

Python:尝试在更改变量时重新计算类属性

转载 作者:行者123 更新时间:2023-12-01 07:43:16 26 4
gpt4 key购买 nike

我正在尝试编写一个 CFD 求解器。我想创建一个通用的流体“节点”,它可以存储属性,并在为其属性之一(例如温度或压力)分配新值时重新计算其属性。因为这涉及相变,所以我还希望某些属性的存在依赖于存储的变量之一。因此,如果 Material 是气体,则存在一些附加属性,而如果 Material 是液体,则一些属性会消失。

我已经尝试了大约两天来找出 set、get 和 @property 的某种组合来满足我的需要,但无济于事。这是我关于堆栈溢出的第一篇文章,但我认为我没有什么可失去的。

我尝试了一些有关 get、set 和 @properties 的基本教程。我有来自以前的求解器的工作(但意大利面条)代码。

class Fluid:
def __init__(self, material, temperature, pressure, mdot, D_hydraulic, Flow_area):
self.material = material
self.temperature = temperature # K
self.pressure = pressure # Pa
self.mdot = mdot # m^3/s
self.D_hydraulic = D_hydraulic # m
self.Flow_area = Flow_area # m^2

if self.material in ["liquid", "fuel", "Monopropellant"]:
self.density = 1419 # Kg/m^3
self.viscosity = 0.125 # Kg/m*s
self.cp = 759.524 # J/Kg*K
self.MW = 0.1268 # Kg/mol
self.k = 0.4 # W/m*K
self.ignition_temp = 388 # K
self.Pr = self.cp*self.viscosity/self.k

if self.material in ["gas", "burnt"]:
self.viscosity = 1.48*10**-5 # Kg/m*s
self.cp = 2170.9 # J/Kg*K
self.MW = 20.819 # Kg/mol
self.k = 0.3 # W/m*K
self.gamma = 1.218 # K
self.R = 445 # J/Kg*K
self.Pr = 1
self.T_combustion = 1900 # K

self.density = self.pressure/(self.R*self.temperature) #Kg/m^3
self.c = (self.gamma*self.R*self.temperature)

self.Velocity = self.mdot/self.Flow_area # m/s
self.Re = D_hydraulic*(self.Velocity)*self.density/self.viscosity

if self.Re < 2300:
self.Nu = 3.66
elif self.Re >= 2300:
self.Nu = 0.023*self.Re**(4/5)*self.Pr**(0.3)

self.h = self.Nu*self.k/self.D_hydraulic #W/m^2*K
X=Fluid("liquid",100,1000,1,0.0004,0.0004)

X.density
Out[9]: 1419

X.material="gas"

X.density
Out[11]: 1419

我希望将 Material 从液体更改为气体,以便根据存储的温度/压力/R 值重新计算密度。

我知道我需要像 @property、set 和/或 get 这样的东西

最佳答案

您可能需要执行以下操作:

class Fluid:
def __init__(self, material, ...):
self._material = material
...

...

@property
def material(self):
return self._material

@material.setter
def material_setter(self, new_material):
# Same logic that you have right now in the __init__

您将 Material 定义为属性并覆盖 setter ,以运行您现在在构造函数中拥有的逻辑。这也应该重新计算其他属性。

注意:您也可以在没有 @property 的情况下实现此目的,方法是重写 __setattr__ 方法并在设置的属性为“material”时重新计算

关于Python:尝试在更改变量时重新计算类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56584142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com