这是上一个问题的后续,我在这个问题上把事情复杂化了。OOP 中的依赖关系可以通过继承或组合来强制执行。在这个例子中,我尝试使用继承。我想用 OOP 对以下简单的方程组进行建模:
T = c_v*t/(a*h)**2
U = (T**3/(T**3+0.5))
使用__init__and__call__方法,并且感谢这个链接,它展示了一种使用面向对象结构建模数学函数的优雅方式,我能够做到以下几点:
class T:
def __init__(self, c_v, a, h):
self.c_v = c_v
self.a = a
self.h = h
def __call__(self, t):
return self.c_v*t/(self.a*self.h)**2
class U(T):
def __call__(self, t):
T = super().__call__(t)
return (T**3/(T**3+0.5) )**(1/6)
然后是以下内容:
>>> U_func = U(1.5E-7, 0.5, 12)
>>> U_func(100*24*60*60)
输出正确的结果。
然而,第 12 行T = super().__call__(t)有点困扰我。我在那里覆盖类定义T吗?我真的不想那样做。另外,我不想在那里为T变量(而不是类)编一个新名称。
是否T仅限于实例方法范围,还是我实际上覆盖了类的定义T?
肥皂起泡泡
长风秋雁
相关分类