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

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 365:
 
Конечно, класс <tt>Y</tt> это лучшая реализация, чем <tt>Y2</tt>, поскольку имеет более простую форму. Как уже отмечалось, использование конструктора это хорошая привычка программирования, конструктор осуществляет удобную связь между «внешним миром» и классом. Цель нашего класса <tt>Y2</tt> только в том чтобы показать что Python обладает большой гибкостью к определению атрибутов и что вообще нет специальных требований ''что'' именно класс должен содержать.
 
 
==Классы без конструктора==
Новичкам в концепции классов часто бывает сложно понять, в чем она вообще состоит. Вообще этот урок мог оказаться для вас весьма утомительным. Может вообще оказаться, что к программированию с помощью классов вы придете и гораздо позже, чем окончите этот курс. И об этом не стоит переживать.
 
Класс содержит набор переменных (данных) и набор методов (функций). Набор переменных уникален для каждого экземпляра класса. То есть, если вы создадите десять экземпляров, каждый из них имеет свои переменные. Эти переменные можно представить как словарь, в котором ключами служат названия переменных. Каждый экземпляр тогда имеет свой словарь и грубо говоря мы можем рассматривать экземпляр как такой словарь.
 
С другой стороны, методы у всех экземпляров общие. Метод касса можно представить как обычную глобальную функцию, принимающую экземпляр в форме словаря как первый аргумент. Метод далее обращается далее к переменным в экземпляре (словаре), указанным при вызове. Для класса <tt>Y</tt> и экземпляра <tt>y</tt>, методы это обычные функции со следующими именами и аргументами:
 
 
<source lang="python">
Y.value(y, t)
Y.formula(y)
</source>
 
 
Класс представляется как ''пространство имен'', то есть все его функции должны иметь префикс <tt>Y</tt>. Два разных класса, скажем <tt>С1</tt> и <tt>С2</tt> могут иметь функции с одним и тем же именем, например <tt>value</tt>, но при этом поскольку они относятся к разным классам, их имена становятся различны: <tt>С1.value</tt> и <tt>С2.value</tt>. Модули также представляют собой пространства имен для своих функций и переменных (<tt>math.sin, cmath.sin,
numpy.sin</tt>)
 
Единственным отличием конструктора класса в Python является то что он позволяет использовать нам другой синтаксис для вызова методов:
 
 
<source lang="python">
y.value(t)
y.formula()
</source>