我如何覆盖枚举构造函数?

问题描述 投票:0回答:2

我想创建一个存储二进制值的枚举,但是我可以将任何值传递给它(它将存储value % 2。]

即:我想使用Python3中的“官方” Enum类型,但更改构造函数。

我尝试过此代码:]]

from enum import Enum

class Color(Enum):
    black = 0
    red = 1

    def __new__(cls, value):
        super().__new__(cls, value % 2)

    def __str__(self):
        return self.name

但出现错误:

>>> from ZCasino import *
ValueError: 0 is not a valid Couleur

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/felix/Téléchargements/ZCasino.py", line 12, in <module>
    class Couleur(Enum):
  File "/usr/lib/python3.8/enum.py", line 212, in __new__
    enum_member = __new__(enum_class, *args)
  File "/home/felix/Téléchargements/ZCasino.py", line 18, in __new__
    super().__new__(cls, value)
  File "/usr/lib/python3.8/enum.py", line 595, in __new__
    raise exc
  File "/usr/lib/python3.8/enum.py", line 579, in __new__
    result = cls._missing_(value)
  File "/usr/lib/python3.8/enum.py", line 608, in _missing_
    raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 0 is not a valid Couleur

我想创建一个存储二进制值的枚举,但是我可以将任何值传递给该枚举(它将存储值%2)。那就是:我想使用Python3中的“官方”枚举类型,但是要更改...

python python-3.x enums constructor overriding
2个回答
0
投票

您需要重写__new__方法之后


0
投票

一种新的类方法可能比覆盖__new__:]是一个更好的主意。

class Color(Enum):
    black = 0
    red = 1

    @classmethod
    def from_int(cls, x):
        return cls(x%2)
© www.soinside.com 2019 - 2024. All rights reserved.