Python:将枚举作为参数传递给另一个类

Python:将枚举作为参数传递给另一个类,python,enums,constructor,arguments,Python,Enums,Constructor,Arguments,我正在处理一段代码,其中我使用枚举为属性定义一组可能的值。我想在实例化另一个类时使用它来明确地设置它的设置方式。但是,它不能可靠地工作。 我现在知道扩展枚举有问题,但这里似乎不是这样。请查看代码..: from enum import Enum class SpecScanParamType(Enum): NUM_ACCUMULATIONS = 0 INTEGRATION_TIME = 1 LASER_POWER = 2 AUTOFOCUS = 3 S

我正在处理一段代码,其中我使用枚举为属性定义一组可能的值。我想在实例化另一个类时使用它来明确地设置它的设置方式。但是,它不能可靠地工作。
我现在知道扩展枚举有问题,但这里似乎不是这样。请查看代码..:

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
因此,问题在某种程度上与扩展枚举限制有关,但为什么它在某些情况下有效?
任何帮助或提示都将不胜感激!我真的希望在这个位置使用Enum,因为它使很多地方的代码更具可读性

这可能是因为在某些情况下使用
SpecScanParamType
代替
SpecScanParameter
。 例如:

c = [SpecScanParameter('test', SpecScanParamType.INTEGRATION_TIME),  # works
     SpecScanParameter('nee', SpecScanParamType.NUM_ACCUMULATIONS),  # works
     SpecScanParamType('test2', SpecScanParamType.SPECTRA_BATCH_SIZE)]  # DOES NOT WORK????
似乎应该是:

c = [SpecScanParameter('test', SpecScanParamType.INTEGRATION_TIME),  # works
     SpecScanParameter('nee', SpecScanParamType.NUM_ACCUMULATIONS),  # works
     SpecScanParameter('test2', SpecScanParamType.SPECTRA_BATCH_SIZE)]  # works

你说“无法到达”是什么意思?如果你一次一个地将它们添加到列表中,会发生什么?你想做什么?在标有
#NOT WORK???
的行上,您正在创建
SpecScanParamType
的实例,这就是您出现此错误的原因。你的意思是创建一个
specscanparmeter
的实例吗?我很想知道否决投票的原因。这里到底出了什么事?啊啊啊啊啊哦我的天啊!感谢您指出显而易见的问题!啊,为什么你不应该在周日晚上工作的经典案例。。。。谢谢你,伙计!(我也不知道为什么有人投反对票——你的答案再正确不过了!)请不要回答打字错误的问题。它们对网站没有持久的价值,它们意味着被关闭和删除。你可以用你目前的声誉来标记它们,一旦你到达3k代表处,你就可以投票关闭它们。在OP问题下的评论足以帮助他。回答这些问题的问题是,如果答案被升级,系统将无法再自动删除该问题,并且需要多个用户手动干预。所以,请帮助我们保持网站清洁和有用!