Is it Pythonic to classify objects by empty child classes?
对不起,这个题目,我不知道如何用更一般的词来表达这个问题。我在研究一个该死的解析器。该语言有8种令牌,我目前用以下类表示:
1 2 3 4 5 6 7 8 9 10 | # 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表示枚举的其他方法,但是我认为这种样式是合适的,因为其中一些实体可能携带额外的数据。例如,在解析器中表示节点类型时,像循环这样的节点将包含一个成员,其中包含循环中的节点。
Type:
1 | import this |
(也叫pep 20)很快解释了什么是Python。
"如果实现很难解释,那是个坏主意。如果实现很容易解释,这可能是一个好主意。"
我不知道你打算怎么做你那该死的翻译。我想您不打算将特定的函数(与给定的…令牌所做的相关)放在…令牌类中。
我将使用函数,或者,如果它们是空的,则使用一个列表来执行此操作,在Py3.4发布后立即用枚举替换。
简而言之:很难解释?继续思考!
python在3.4中获得了一个正式的枚举类。
如果您在2.4和3.3之间使用Python,请检查Enum34的后端端口。
也可以向自定义枚举类添加其他行为和状态。