Python:将对象分组在一起

标签 python object dictionary tuples grouping

让我们来看下面一段代码,定义算术运算符对象(标记):

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/

相关文章:

python - 推特流媒体 API - urllib3.exceptions.ProtocolError : ('Connection broken: IncompleteRead

javascript - 我们如何使用 javascript 将 HTML 字符串转换为对象?

javascript - 将对象数组转换为单个对象

c# - 什么是最快的 sql 实现,如 'x%' 在 c# 集合中的键

.NET - JSON 数据 - 反序列化 - 列表和字典

java - 将数据从 MongoDB 加载到 HashMap

python - 如何将 x 轴标签添加到 seaborn 图形级图中的每个图

python - 提取属于一天的数据值并计算每天的平均值

python - 为什么我的 pygame.group 在循环中具有空值?

jQuery 脚本在 Firefox 和 Internet Explorer 上返回新窗口