让我们以下面的一段代码,定义算术运算符对象(标记):的Python:组合对象在一起
class Operator:
def __init__(self, precedence):
self.precedence = precedence
PLUS = Operator(0)
UPLUS = Operator(10)
MIN = Operator(0)
UMIN = Operator(10)
MULT = Operator(20)
operators = PLUS, UPLUS, MIN, UMIN, MULT
我想运营商在某处被分组,这样我可以在他们重复或检查的成员。因为我稍后会添加很多其他人,所以我想只能将它们添加到一个地方,而不是两个(实现一个操作员,但忘记将其添加到operators
可能导致微妙的错误)。我试过类似
operators = (PLUS = Operator(0), MIN = Operator(0), ...)
和类似的,但这显然不是一个有效的Python语句。
我目前使用的解决方案是一个dict
定义:
operators = dict(
PLUS=Operator(0),
MIN=Operator(0),
...
)
该工程确定,但它意味着任何时候我想用一个单一运营商的工作,我必须把它称为例如operators['PLUS']
,而不是更简短更清晰的。我可以住在哪里,但我想知道是否存在更好的解决方案。
我决定这样做(我也喜欢Enum解决方案,但引用元素有点冗长 - 例如, 'Operators.PLUS.value')。但是我遇到了一个问题,我将编辑到OP中。 –
没关系,我在我的代码中发现了问题。这个解决方案没问题,我只是在'__init__'中包含了一个检查'if group',并忘记了空列表在bool表达式中也被评估为'False'。更改为“如果组不是无”,现在工作正常。干杯! –