gpt4 book ai didi

python - 如果我使用与父类(super class)相同的名称,我是否会覆盖子类方法中的父类(super class)定义?

转载 作者:行者123 更新时间:2023-12-04 16:59:05 26 4
gpt4 key购买 nike

这是 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 ?

最佳答案

有两个不同的变量名为 T :

  • 一个类绑定(bind)到名称 T在当前模块的全局范围内。
  • 该类的实例绑定(bind)到名称 T在函数的局部范围内 U.__call__ .

  • 它们是完全独立的,除了在 __call__ 里面,您必须通过限定名称来引用该类,例如 __name__.T , 由于局部变量 T阴影全局。

    关于python - 如果我使用与父类(super class)相同的名称,我是否会覆盖子类方法中的父类(super class)定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464358/

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