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

Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 393:
 
 
Мы можем легко реализовать концепцию класса и без него самого. Как мы уже выяснили, все что нам нужно это словарь и обычные функции. Наш класс <tt>Y</tt> может быть реализован и так:
 
 
''Продолжение следует''
<source lang="python">
def value(self, t):
return self['v0']*t - 0.5*self['g']*t**2
 
def formula(self):
print 'v0*t - 0.5*g*t**2; v0=%g' % self['v0']
</source>
 
 
Представим эти две функции расположены в модуле <tt>Y</tt>:
 
 
<source lang="python">
import Y
y = {'v0': 4, 'g': 9.81} # создаем "экземпляр"
y1 = Y.value(y, t)
</source>
 
 
Теперь у нас нет вообще никакого конструктора, поскольку нет и класса. Инициализация происходит при создании словаря <tt>y</tt>, но мы можем включить инициализацию и в модуль <tt>Y</tt>:
 
 
<source lang="python">
def init(v0):
return {'v0': v0, 'g': 9.81}
</source>
 
 
Использование такого модуля-класса теперь выглядит более похожим на обычное:
 
 
<source lang="python">
import Y
y = Y.init(4)
y1 = Y.value(y, t)
</source>
 
 
И такая реализация вполне возможна и существует. На самом деле любой класс в Python имеет словарь-атрибут <tt>__dict__</tt>, который хранить все имеющиеся в экземпляре переменные:
 
 
<source lang="python">
>>> y = Y(1.2)
>>> print y.__dict__
{'v0': 1.2, 'g': 9.8100000000000005}
</source>
 
 
Итак, в этом уроке мы рассмотрели классы ''с технической точки зрения''. Следующий урок скорее посвящен классам как пути моделирования в терминах данных и операциях над данными.