このスタック オーバーフローの質問 (C ステート マシンの設計)に関連して、スタック オーバーフローの皆さん、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 の動的な性質 (動的ディスパッチなど) を活用しながら、それを行う方法はたくさんあると確信しています。
マシンの「状態」から「イベント」を受けて「発信」する「エンジン」の設計手法を追求しています。