You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义DataTypes IntEnum映射到另一组整数?

如何将IntEnum映射到另一组整数

针对你现有的DataTypes IntEnum类,要把它的成员映射到另一组全新的整数值,有几种实用的实现方式,我给你逐一说明:

方法1:直接使用字典映射(最简单直观)

这是最直接的方式,定义一个字典把每个枚举成员和目标整数一一对应起来,使用时直接通过字典取值即可:

from enum import IntEnum

class DataTypes(IntEnum):
    Bytei = 0 # RAM缓冲变量8位(开关量输入)
    Byteo = 1 # RAM缓冲变量8位(开关量输出)
    Bytem = 2 # RAM缓冲变量8位(标志位)
    Wordi = 3 # RAM系统变量16位(有符号整数)
    Wordo = 4 # RAM系统变量16位(有符号整数)
    Wordm = 5 # RAM缓冲变量16位(有符号整数)
    Wordp = 6 # E2PROM变量(参数)16位(有符号整数)
    Dworm = 7 # RAM缓冲变量32位(有符号长整数...)

# 自定义映射关系,替换成你需要的目标整数值
data_type_to_new_int = {
    DataTypes.Bytei: 10,
    DataTypes.Byteo: 11,
    DataTypes.Bytem: 12,
    DataTypes.Wordi: 20,
    DataTypes.Wordo: 21,
    DataTypes.Wordm: 22,
    DataTypes.Wordp: 30,
    DataTypes.Dworm: 40
}

# 调用示例
print(data_type_to_new_int[DataTypes.Bytei])  # 输出: 10

如果需要反向映射(从新整数转回原枚举成员),可以快速生成反向字典:

new_int_to_data_type = {v: k for k, v in data_type_to_new_int.items()}
print(new_int_to_data_type[10])  # 输出: DataTypes.Bytei

方法2:给枚举类添加映射方法(更封装)

如果希望映射逻辑和枚举类绑定在一起,显得更整洁,可以给DataTypes添加一个实例方法,内部实现映射:

from enum import IntEnum

class DataTypes(IntEnum):
    Bytei = 0 # RAM缓冲变量8位(开关量输入)
    Byteo = 1 # RAM缓冲变量8位(开关量输出)
    Bytem = 2 # RAM缓冲变量8位(标志位)
    Wordi = 3 # RAM系统变量16位(有符号整数)
    Wordo = 4 # RAM系统变量16位(有符号整数)
    Wordm = 5 # RAM缓冲变量16位(有符号整数)
    Wordp = 6 # E2PROM变量(参数)16位(有符号整数)
    Dworm = 7 # RAM缓冲变量32位(有符号长整数...)

    def to_new_integer(self):
        # 在这里定义映射关系
        mapping = {
            DataTypes.Bytei: 10,
            DataTypes.Byteo: 11,
            DataTypes.Bytem: 12,
            DataTypes.Wordi: 20,
            DataTypes.Wordo: 21,
            DataTypes.Wordm: 22,
            DataTypes.Wordp: 30,
            DataTypes.Dworm: 40
        }
        return mapping[self]

# 调用示例
print(DataTypes.Byteo.to_new_integer())  # 输出: 11

方法3:基于规则计算(如果新值有规律)

如果你的目标整数和原枚举值存在固定的计算规则(比如原数值+10、乘2等),完全不需要字典,直接通过计算得到:

from enum import IntEnum

class DataTypes(IntEnum):
    Bytei = 0 # RAM缓冲变量8位(开关量输入)
    Byteo = 1 # RAM缓冲变量8位(开关量输出)
    Bytem = 2 # RAM缓冲变量8位(标志位)
    Wordi = 3 # RAM系统变量16位(有符号整数)
    Wordo = 4 # RAM系统变量16位(有符号整数)
    Wordm = 5 # RAM缓冲变量16位(有符号整数)
    Wordp = 6 # E2PROM变量(参数)16位(有符号整数)
    Dworm = 7 # RAM缓冲变量32位(有符号长整数...)

    def to_new_integer(self):
        # 示例规则:原数值+10,根据你的实际规则修改
        return self.value + 10

# 调用示例
print(DataTypes.Wordp.to_new_integer())  # 输出: 16

你可以根据自己的实际场景选择最合适的方式:如果映射是完全自定义无规律,用字典或枚举方法;如果有固定计算逻辑,直接用规则计算会更高效。

内容的提问来源于stack exchange,提问作者Kami Kaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:06:27