Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New enum features in Python 3.11 #12841

Open
3 of 5 tasks
AlexWaygood opened this issue May 22, 2022 · 4 comments
Open
3 of 5 tasks

New enum features in Python 3.11 #12841

AlexWaygood opened this issue May 22, 2022 · 4 comments
Labels
feature meta Issues tracking a broad area of work topic-enum

Comments

@AlexWaygood
Copy link
Member

AlexWaygood commented May 22, 2022

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

  • enum.property
  • enum.verify
  • enum.(non)member
  • ReprEnum
  • StrEnum

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:

@AlexWaygood AlexWaygood added feature meta Issues tracking a broad area of work labels May 22, 2022
ilevkivskyi added a commit that referenced this issue Nov 18, 2022
Fixes #12483
Fixes python/typeshed#7564
Ref #12841

The fix is straightforward. I can't use a unit test for this because
there are some builtins fixtures that don't have tuple, so I can't do
version check.
@electric-coder
Copy link

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
Copy link

electric-coder commented Dec 28, 2023

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

@CoolCat467
Copy link

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

@AlexWaygood
Copy link
Member Author

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

Done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature meta Issues tracking a broad area of work topic-enum
Projects
None yet
Development

No branches or pull requests

3 participants