【发布时间】:2021-01-19 17:07:34
【问题描述】:
我正在编写一段代码,我在其中使用 Enum 为属性定义一组可能的值。我想在实例化另一个类时使用它来明确设置它的设置方式。但是,它不能可靠地工作。
我现在知道扩展枚举存在问题,但这里似乎并非如此。请看代码..:
from enum import Enum
class SpecScanParamType(Enum):
NUM_ACCUMULATIONS = 0
INTEGRATION_TIME = 1
LASER_POWER = 2
AUTOFOCUS = 3
SPECTRA_BATCH_SIZE = 4
class SpecScanParameter:
def __init__(self, name: str, paramType: SpecScanParamType):
self.name: str = name
self.paramType: SpecScanParamType = paramType
a = SpecScanParameter('test', SpecScanParamType.LASER_POWER) # works
b = [SpecScanParameter('test', SpecScanParamType.NUM_ACCUMULATIONS), # works
SpecScanParameter('nee', SpecScanParamType.SPECTRA_BATCH_SIZE)] # works
c = [SpecScanParameter('test', SpecScanParamType.INTEGRATION_TIME), # works
SpecScanParameter('nee', SpecScanParamType.NUM_ACCUMULATIONS), # works
SpecScanParamType('test2', SpecScanParamType.SPECTRA_BATCH_SIZE)] # DOES NOT WORK????
specScanParameters = [SpecScanParameter('Integration Time (s)', SpecScanParamType.INTEGRATION_TIME), # works
SpecScanParamType('Number of Scans', SpecScanParamType.NUM_ACCUMULATIONS), # Does not work
SpecScanParamType('Spectra Batch Size', SpecScanParamType.SPECTRA_BATCH_SIZE)] # not reachable...
Sooo,前几个变体可以正常工作。但是,如果我想创建一个参数列表,它会在不同的位置失败,无论是列表中已经有一个或两个..我无法识别任何模式...... 啊,报错是这个:
TypeError: Cannot extend enumerations
所以问题在某种程度上与扩展 Enums 限制有关,但为什么它在某些情况下有效? 任何帮助或提示将不胜感激!我真的很想在这个位置使用 Enum,因为它使很多地方的代码更具可读性!
【问题讨论】:
-
“无法访问”是什么意思?如果您一次将它们添加到列表中,会发生什么?
-
你想做什么?在标记为
# DOES NOT WORK????的行上,您正在创建SpecScanParamType的实例,这就是您收到此错误的原因。您的意思是创建SpecScanParameter的实例吗?
标签: python enums constructor arguments