New submission from John Hagen: I suggest that the AutoNumberedEnum be added to the standard library for the following reasons:
1) Provides a fundamental tool for defining a unique, abstract set of coupled members 2) Avoids boilerplate @enum.unique for a very common use case of enumerations 3) The code already exists in the Python documentation, so it has been vetted at some level The AutoNumberedEnum also allows the developer to make a clearer distinction between enumerations whose values have special meaning and those that do not. Consider: @enum.unique class Color(enum.Enum): red = 1 blue = 2 green = 3 @enum.unique class Shape(enum.Enum): """Member values denote number of sides.""" circle = 1 triangle = 3 square = 4 With AutoNumberedEnum it's possible to better express the intent that the value of Color members does not hold special meaning, while Shape members do: class Color(enum.AutoNumberedEnum): red = () blue = () green = () @enum.unique class Shape(enum.Enum): """Member values denote number of sides.""" circle = 1 triangle = 3 square = 4 For enumerations with many members (10s), there becomes a maintenance issue when inserting new enumerations into the list: @enum.unique class Color(enum.Enum): aquamarine = 1 blue = 2 fushia = 3 # inserting a member here (perhaps because it's clearest to keep these in alphabetic order) # results in having to increment all following members ... green = 40 red = 41 Most other languages have support for naming enumerations without explicitly declaring their values (albeit with specialized syntax that makes it cleaner): C++: http://en.cppreference.com/w/cpp/language/enum C#: https://msdn.microsoft.com/en-us/library/sbbt4032.aspx Java: https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html Rust: https://doc.rust-lang.org/book/enums.html Currently, a developer can copy the code from the Python docs into his or her project, or add a dependency on aenum. I would argue that it belongs in the standard library. If there are objections to it being too magical, I would argue it's already spelled out in the docs, so it's being prescribed as a solution already. I think it should be very clear when you derive from "AutoNumberedEnum" what is going on. The code is very simple, so I would hope maintenance would not be difficult. ---------- components: Library (Lib) messages: 265214 nosy: John Hagen, ethan.furman priority: normal severity: normal status: open title: Add AutoNumberedEnum to stdlib type: enhancement versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue26988> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com