让我们来看下面一段代码,定义算术运算符对象(标记):
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),
...
)
这工作正常,但这意味着任何时候我想与一个运算符(operator)一起工作,我必须将其称为例如operators['PLUS']
,而不是更短更清晰的 PLUS
。我可以接受,但我想知道是否存在更好的问题解决方案。
最佳答案
您可以使用枚举
:
from enum import Enum
class Operator:
def __init__(self, precedence):
self.precedence = precedence
def __str__(self):
return "Operator: prec={}".format(self.precedence)
class Operators(Enum):
PLUS = Operator(0)
UPLUS = Operator(10)
MIN = Operator(0)
UMIN = Operator(10)
MULT = Operator(20)
p = Operators.PLUS
print(p) # Operators.PLUS
print(p.name) # PLUS
print(p.value) # Operator: prec=0
关于Python:将对象分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36252512/