Это продолжение предыдущего вопроса , в котором я слишком усложнял вещи. Зависимость в ООП может быть обеспечена либо наследованием, либо композицией. В этом примере я пытаюсь использовать наследование. Я хотел бы смоделировать следующий простой набор уравнений с ООП:
T = c_v*t/(a*h)**2
U = (T**3/(T**3+0.5))
Используя методы __init__
и __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
?