Pythonic是否通过空子类对对象进行分类?

时间:2013-08-27 22:10:47

标签: python enums

对标题感到抱歉,我不确定如何在更广泛的意义上说出这个问题。我正在研究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代表枚举,但我认为这种风格是合适的,因为其中一些实体可能带有额外的数据。例如,在表示解析器中的节点类型时,像循环这样的节点将包含一个包含循环内节点的成员。

2 个答案:

答案 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被释放就会被枚举替换。

简而言之:难以解释?继续思考!