Форум сайта python.su
Делаю на досуге приложение для рассчета силовых трансформаторов. Процесс рассчета итеративный: если на одном из этапов произошло непопадание в технические условия, то нужно вернуться к одному из предыдущих этапов и попробовать другой вариант.
План примерно такой:
# Выражаюсь метаформами
Вначале мы имеем изделие, которое, проходя через все стадии рассчета, постепенно обрастает данными.
Стадии выглядят примерно так:
Вариант1, Вариант2, …, ВариантN
______стадия_рассчета_1_________
Вариант1, Вариант2, …, ВариантN
______стадия_рассчета_2_________
…
Вариант1, Вариант2, …, ВариантN
______стадия_рассчета_N_________
Информация о том, что было изменено на стадии, сколько ещё вариантов изменения осталось и как эта стадия называется записывается в журнал Изделия. Беда в том, что из-за недостатка моих знаний эту информацию приходится записывать вручную. Это несколько некошерно, так как я чувствую, что есть способ делегировать эти полномочия программе. Например с помощью декораторов.
Стадии реализованы в виде типовых классов. В каждом классе есть методы .count() и .to_journal().
Вот пример простой формулы-стадии (прототип).
class r1_S:
"""Мощность одной фазы и одного стержня"""
def __init__(self, product):
self.name = 'r1_S'
self.product = product
# Данные, которые используются в этой формуле
self.S = product.ut['S_kVA'] # Полная мощность
self.m = product.ut['phase_num'] # Число фаз
def count(self):
# Вычисление
self.Sf = float(self.S) / self.m
# Запись результатов
self.product.math['Sf'] = self.Sf
def text(self):
# Текстовая аннотация
self.product.text += [
"""Мощность одной фазы и одного стержня:
S_ф = S\' = S/m = {0}/{1} = {2}""".format(self.S, self.m, self.Sf)]
def to_journal(self):
# Запись в журнал Изделия
self.product.journal.append( {'handler_name': self.name, 'Sf': self.Sf} )
def to_journal(self):
# Запись в журнал Изделия
self.product.journal.append( {'handler_name': self.name, 'Sf': self.Sf} )
Офлайн