【发布时间】:2020-02-16 05:57:14
【问题描述】:
这是previous question 的后续行动,我在其中使事情变得过于复杂。 OOP 中的依赖关系可以通过继承或组合来强制执行。在这个例子中,我尝试使用继承。我想用 OOP 对以下简单的方程组进行建模:
T = c_v*t/(a*h)**2
U = (T**3/(T**3+0.5))
使用__init__ 和__call__ 方法,感谢this link,它展示了一种使用面向对象结构建模数学函数的优雅方式,我能够做到以下几点:
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 类的定义?
【问题讨论】:
标签: python oop namespaces