[Python-Dev] PEP 435 -- Adding an Enum type to the Python standard library
Nikolaus Rath
Nikolaus at rath.org
Sat Apr 27 04:10:53 CEST 2013
Steven D'Aprano <steve at pearwood.info> writes:
> On 26/04/13 13:22, Greg wrote:
>> On 26/04/2013 3:12 p.m., Glenn Linderman wrote:
>>> On 4/25/2013 7:49 PM, Nick Coghlan wrote:
>>
>>>> You couldn't create an enum of callables, but that would be a
>>>> seriously weird thing to do anyway....
>>>
>>> But aren't all classes callable?
>>
>> An enum of classes would be seriously weird as well, I think.
>
>
> I don't think iscallable will work, since that descriptors like
> staticmethod and classmethod aren't callable. Nor are properties.
>
>
> I think a solution may be an explicit decorator that tells the
> metaclass not to skip the object into an enum value:
>
>
> class Insect(enum.Enum):
> ant = 1
> bee = 2
>
> @enum.skip
> @classmethod
> def spam(cls, args):
> pass
In this case, wouldn't it be nicer to "decorate" those attributes that
are meant to be enum values? I think having to use the class keyword to
define something that really doesn't behave like an ordinary class is
pretty confusing, and the following syntax would be a lot easier to
understand at first sight:
class Insect(enum.Enum):
ant = enum.EnumValue(1)
bee = enum.EnumValue(2)
@classmethod
def spam(cls, args):
pass
def ham(self, args):
pass
Obviously, EnumValue() would automatically assign a suitable number.
Best,
-Nikolaus
--
»Time flies like an arrow, fruit flies like a Banana.«
PGP fingerprint: 5B93 61F8 4EA2 E279 ABF6 02CF A9AD B7F8 AE4E 425C
More information about the Python-Dev
mailing list