Cannot define Enum class with a mixin class derived from ABC
Aperta
@ethanfurman ci sta già lavorando.
Dal 2/6/2024.
stdlib
type-bug
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Valutazione
Questa issue non è ancora stata valutata.