python / mypy

Optional static typing for Python
https://www.mypy-lang.org/
Other
18.27k stars 2.79k forks source link

New enum features in Python 3.11 #12841

Open AlexWaygood opened 2 years ago

AlexWaygood commented 2 years ago

There's a ton of new enum features in Python 3.11 that mypy doesn't yet support:


enum.property is not yet supported:


The new enum.verify decorator isn't supported: the following snippet will raise an exception at runtime on 3.11 due to not all values being unique, but it passes mypy:

from enum import Enum, verify, UNIQUE

@verify(UNIQUE)
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    CRIMSON = 1

enum.member/enum.nonmember. The docs are a bit thin on these, but it looks like in the following enum, BAR is converted to become a member, but BAZ is not:

from enum import Enum, nonmember

class Foo(Enum):
    BAR = 1
    BAZ = nonmember(2)

(These two can also be used as decorators)


ReprEnum: this doesn't need any special support by mypy, but the following mypy bug but means that it can't really be used idiomatically at the moment:


StrEnum: I didn't think this required any special treatment from mypy, but there's a weird bug here in mypy's handling of StrEnum:

electric-coder commented 1 year ago

There are 83 open Enum mypy issues at the the time of this writing.

Getting the Enum datatype to work with mypy is becoming impossible as I find myself having to use cast() in at least every other line.

electric-coder commented 9 months ago

@AlexWaygood there's also Enum's _new_member_ that hasn't been mentioned in the docs nor in the mypy repository.

CoolCat467 commented 3 months ago

With https://github.com/python/mypy/pull/17376 being merged we should be able to check off enum.nonmember, no?

AlexWaygood commented 3 months ago

With #17376 being merged we should be able to check off enum.nonmember, no?

Done