Программирование и научные вычисления на языке Python/§15: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 11:
<math>y(t) = v_0(t) - \frac{1}{2}gt^2</math>.
 
Здесь ''y'' является функций времени ''t'' и кроме того, зависит от других параметров ''v<sub>0</sub>'' и ''g''. Мы могли бы придумать какое-то новое обозначение, вроде ''y''(''t; ''v<sub>0</sub>, g''), чтобы показать, что ''t'' является независимой переменной, а ''v<sub>0</sub>'' и ''g'' задаваемыми параметрами. При этом, строго говоря для Земли ''g'', гравитационная постоянная, неизменна, то есть правильнее было бы писать 'y''(''t; v<sub>0</sub>''). В общем случае, у нас может иметься функция, которая будет записываться ''f''(''x''; ''p<sub>1</sub>, ..., p<sub>n</sub>'').
 
Как нам лучше интерпретировать такие математические функции в виде программных? Первое очевидное решение получать и переменные, и изменяемые параметры как аргументы обычной функции:
Строка 86:
===Представление функции в виде класса===
Класс заключает в себе набор переменных (данных) и набор функций, связанных в единое целое. Переменные видны изнутри класса всем его функциям. То есть они «глобальные» для функций своего класса. Класс похож на модуль, но находящийся в тексте самой программы. Но при этом по технике его использования он существенно отличается. Например, вы можете создать множество копий одного класса, в то время как модуль выступает в единственном числе. Когда мы получше познакомимся с классами, вы и сами увидите схожие моменты и отличия. А сейчас продолжим рассмотрение нашего примера.
 
Обращаясь к нашей функции 'y''(''t; v<sub>0</sub>'') мы можем сказать, что переменные <tt>v0</tt> и <tt>g</tt> определяют данные, а <tt>t</tt> служит аргументом некоторой функции Python <tt>value(t)</tt>.
 
Программист, практикующий классы, соберет данные <tt>v0</tt> и <tt>g</tt> и функцию <tt>value(t)</tt> вместе в один класс. К тому же класс обычно содержит и другую функцию называемую ''конструктором'' (constructor) для инициализации данных. Конструктор всегда носит имя <tt>__init__</tt>. Каждый класс имеет имя, которое традиционно начинают с большой буквы, поэтому для нашего класса мы выберем имя <tt>Y</tt>, соотнося его таким образом с ''y'' для математической функции.
 
 
===Реализация===
Законченный код для нашего класса <tt>Y</tt> выглядит следующим образом:
 
 
<source lang="python">
class Y:
def __init__(self, v0):
self.v0 = v0
self.g = 9.81
 
def value(self, t):
return self.v0*t - 0.5*self.g*t**2</source>