В связи с этим вопросом о переполнении стека (проектирование машины состояний C), не могли бы вы, ребята из Stack Overflow, поделиться своими методами проектирования машины состояний Python со мной (и сообществом)?
На данный момент я собираюсь на двигатель, основанный на следующем:
class TrackInfoHandler(object):
def __init__(self):
self._state="begin"
self._acc=""
## ================================== Event callbacks
def startElement(self, name, attrs):
self._dispatch(("startElement", name, attrs))
def characters(self, ch):
self._acc+=ch
def endElement(self, name):
self._dispatch(("endElement", self._acc))
self._acc=""
## ===================================
def _missingState(self, _event):
raise HandlerException("missing state(%s)" % self._state)
def _dispatch(self, event):
methodName="st_"+self._state
getattr(self, methodName, self._missingState)(event)
## =================================== State related callbacks
Но я уверен, что есть множество способов достичь этого, используя динамический характер Python (например, динамическая диспетчеризация).
Я занимаюсь разработкой методов для "двигателя", который получает "события" и "рассылки" против тех, которые основаны на "состоянии" машины.