对标题感到抱歉,我不确定如何在更广泛的意义上说出这个问题。我正在研究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中有other ways代表枚举,但我认为这种风格是合适的,因为其中一些实体可能带有额外的数据。例如,在表示解析器中的节点类型时,像循环这样的节点将包含一个包含循环内节点的成员。
答案 0 :(得分:1)
Python在3.4中获得官方枚举类。
如果您在2.4和3.3之间使用Python,请检查enum34 backport。
也可以add other behavior and state到自定义Enum类。
答案 1 :(得分:1)
输入:
import this
(也称为PEP 20)很快解释了什么是pythonic。
“如果实施难以解释,这是一个坏主意。 如果实施很容易解释,那可能是个好主意。“
我不知道你打算怎么做你的脑筋解释器。我想你不打算把特定的函数(与给定的...令牌相关)放在...令牌类中。
我会使用函数,或者如果它们是空的,那么列表就会这样做,一旦Py 3.4被释放就会被枚举替换。
简而言之:难以解释?继续思考!