4

タイトルについて申し訳ありませんが、この質問をより一般的な意味で表現する方法がわかりません。私はbrainfuckパーサーに取り組んでいます。この言語には 8 種類のトークンがあり、現在は次のクラスで表しています。

# Types of lexical tokens
class Token: pass
class IncPtrToken(Token): pass
class DecPtrToken(Token): pass
class IncByteToken(Token): pass
class DecByteToken(Token): pass
class OutputByteToken(Token): pass
class InputByteToken(Token): pass
class LoopStartToken(Token): pass
class LoopEndToken(Token): pass

別の言語では、さまざまな型を表すためにおそらく列挙型を使用しますが、Python ではこれが合理的な代替手段のようです。

Python で列挙型を表す方法は他にもあると読んだことがありますが、これらのエンティティの一部には追加のデータが含まれている可能性があるため、このスタイルが適していると思います。たとえば、パーサーでノードのタイプを表す場合、ループのようなノードには、ループ内のノードを持つメンバーが含まれます。

4

2 に答える 2

1

Python は 3.4 で公式の Enum クラスを取得します。

Python 2.4 から 3.3 を使用している場合は、enum34 backportを確認してください。

カスタム Enum クラスに他の動作と状態を追加することもできます。

于 2013-08-27T22:47:34.360 に答える
1

タイプ :

import this

(PEP 20 とも呼ばれます) は、Pythonic とは何かを簡単に説明しています。

「実装が説明しにくい場合、それは悪い考えです。実装が説明しやすい場合、それは良い考えかもしれません。」

頭のおかしい通訳をどうするつもりなのかわからない。特定の関数 (指定された ...Token の機能に関連する) を ...Token クラス内に配置するつもりはないと思います。

関数を使用するか、空の場合はリストを使用して、Py 3.4 がリリースされるとすぐに列挙型に置き換えます。

一言で言えば、説明するのは難しいですか?考え続ける!

于 2013-08-27T22:56:26.400 に答える