Cannot define Enum class with a mixin class derived from ABC
未关闭
@ethanfurman 已经在做这个了。
开始于 2024年6月2日。
stdlib
type-bug
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
Bug report
Bug description:
from abc import ABC, abstractmethod
from enum import Enum
class HasColor(ABC):
@abstractmethod
def color(self):
...
class Flowers(HasColor, Enum):
ROSES = 1
VIOLETS = 2
def color(self):
match self:
case self.ROSES:
return 'red'
case self.VIOLETS:
return 'blue'
This results in:
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
There is a work-around by metaclass hacking. But these two basic Python features are expected to Just Work together in a simple, intuitive, and pythonic way.
The fix should be very simple - make EnumType a subclass of ABCMeta. But it's slightly more complicated than that, so that the _simple_enum decorator and _test_simple_enum continue to work as expected. See the provided patch.
CPython versions tested on:
3.12, 3.13
Operating systems tested on:
macOS
Linked PRs
- gh-119947
- gh-149830
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
评估
这个 Issue 还没有评估数据。