I also generally think of Enum as a collection of constants so I favor CAP_WORDS for enum members. I will admit that my answer is biased in that I don't typically create Enums that have a whole bunch of methods as you've done in your example. For your example code, I might separate it out into two classes (something representing a Date and an enum representing a Holidays). The former class could use the latter to compute things like "Next business day", etc.
On Mon, Jul 18, 2016 at 8:41 AM, Guido van Rossum firstname.lastname@example.org wrote:
Honestly my own preference would be to use UPPER_CASE, emphasizing the const-ness. CapWords is really only used for classes, which are entirely different beasts. And lower_case is for methods and variables. I think it's useful to emphasize that an enum is neither.
On Mon, Jul 18, 2016 at 8:17 AM, Ethan Furman email@example.com wrote:
There are currently a few locations in the stdlib, such as http and
that are now using Enums to replace constants; those names are all upper-case -- those
the names I am speaking of.
The names I am speaking of are those in brand-new enumerations where we
As an example:
class FederalHoliday(AutoNumberEnum): NewYear = "First day of the year.", 'absolute', JANUARY, 1 MartinLutherKingJr = "Birth of Civil Rights leader.", 'relative', JANUARY, MONDAY, 3 President = "Birth of George Washington", 'relative', FEBRUARY,
3 Memorial = "Memory of fallen soldiers", 'relative', MAY, MONDAY, 5 Independence = "Declaration of Independence", 'absolute', JULY, 4 Labor = "American Labor Movement", 'relative', SEPTEMBER, MONDAY, 1 Columbus = "Americas discovered", 'relative', OCTOBER, MONDAY, 2 Veterans = "Recognition of Armed Forces service", 'relative',
11, 1 Thanksgiving = "Day of Thanks", 'relative', NOVEMBER, THURSDAY, 4 Christmas = "Birth of Jesus Christ", 'absolute', DECEMBER, 25
def __init__(self, doc, type, month, day, occurance=None): self.__doc__ = doc self.type = type self.month = month self.day = day self.occurance = occurance def date(self, year): """ returns the observed date of the holiday for `year` """" ... @classmethod def next_business_day(cls, date, days=1): """ Return the next `days` business day from date. """ ... @classmethod def count_business_days(cls, date1, date2): """ Return the number of business days between 'date1' and 'date2'. """ ... @classmethod def year(cls, year): """ Return a list of the actual FederalHoliday dates for `year`. """ ...
Take the name "NewYear": if it had been a global constant I would have named it "NEWYEAR"; if it had been a normal class attribute I would have named it "new_year"; however, being an Enum member, it is neither of those things.
<context switch> I've written some custom data types as part of my dbf package, and a few
them have instances that are singletons that are created in the global (okay, module)
and for them I followed Python's lead in naming singletons: Python has used Title Case
such things as None, True, and False, so I followed suit and named mine -- Null, NullDate, NullTime, NullDateTime, etc. </context switch>
Given my past history with using and creating singleton objects, I
suit when creating my own Enum classes.
I was recently queried about my apparent break with PEP 8 for naming Enum members, to which I replied:
Considering the strange beast that an Enum is, there is not much
for it anywhere.
Enum is a class
but it is a container
and can be iterated over
and it has a length (which can be zero)
but it's always True in a boolean sense
Enum members are instances of the Enum class
but are pre-created
and new ones cannot be created
but are available as attributes on the class
Given all that I have been using Title case (or CamelCase) to name the members as it helps distinguish an Enum member from an ordinary attribute (which Enum
can also have).
I forgot to include in that reply that I think CamelCase also helps to emphasize the special singleton nature of Enum members.
My question for the community: Your thoughts/opinions of my reasoning,
if you don't agree then which casing choice would you recommend and use, and why?
this question does not include Enums whose names are replacements for existing constants
the names cannot be changed.)
-- ~Ethan~ _______________________________________________ Python-ideas mailing list Pythonfirstname.lastname@example.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
-- --Guido van Rossum (python.org/~guido) _______________________________________________ Python-ideas mailing list Pythonemail@example.com https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/