[Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library
Glenn Linderman
v+python at g.nevcal.com
Fri Apr 26 01:26:54 CEST 2013
On 4/25/2013 3:37 PM, Guido van Rossum wrote:
> On Thu, Apr 25, 2013 at 3:29 PM, Barry Warsaw<barry at python.org> wrote:
>> >On Apr 25, 2013, at 03:19 PM, Guido van Rossum wrote:
>>> >>I suppose you were going to propose to use isinstance() overloading,
>>> >>but I honestly think that Color.red.__class__ should be the same
>>> >>object as Color.
>> >
>> >Yes, a custom __instancecheck__() is two lines of code.
>> >
>> >I just can't get over the weirdness of a class having attributes which are
>> >actual instances of itself.
> TBH I had a hard time getting over the fact that even though the class
> said "a = 1", C.a is not the integer 1. But I did get over it.
> Hopefully you can get over*this* weirdness.
:)
The minute "metaclass" is involved, it is no longer a class, but a
whatchamacallit. What blows people's minds regarding metaclasses is that
they aren't necessarily what they look like. In this case, we are
defining enumerations using a syntax that sort of looks like class
attribute syntax, which are neither classes, nor types, but rather a
collection of cooperative objects with shared methods in a shared
subsidiary namespace.
Perhaps instead of metaclass altering the behavior of classes, it might
have been less confusing to simply define a new keyword
"whatchamacallit" (or "metaclass") that have behaviors defined by the
various methods defined in connection with it... while the existing
techniques exist and would require a deprecation cycle to eliminate, it
may not be too late to define alternate keywords that make it clearer
that using such keywords, is making user-defined objects of some sort,
class-like or -unlike, type-like or -unlike, object-like or -unlike,
cooperative or not, etc., all by user definition. Any behavioral
resemblance to classes would be only by user specification of same
(perhaps such a specification of "same as class" should be easy).
My question is, once an enumeration is defined, is there a way, short of
element-by-element assignment, to import the individual enumeration
instances into the current namespace, so that I can say "red" instead of
"Color.red" ? I understand the benefits of avoiding name collisions when
there are lots of enumerations, and lots of opportunities for name
collections between, say, RGBColor and CYMKColor... but there are lots
of uses for enumerations where the subsidiary namespace is just
aggravating noise.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130425/43096a0e/attachment.html>
More information about the Python-Dev
mailing list