Ethan Furman added the comment:
Sample code:
--------------------------------------------------------------------------------
class AutoEnum(enum.Enum):
"""
Automatically numbers enum members starting from 1.
Includes support for a custom docstring per member.
"""
__last_number__ = 0
def __new__(cls, *args):
"""
Ignores arguments (will be handled in __init__.
"""
value = cls.__last_number__ + 1
cls.__last_number__ = value
obj = object.__new__(cls)
obj._value_ = value
return obj
def __init__(self, *args):
"""
Can handle 0 or 1 argument; more requires a custom __init__.
0 = auto-number w/o docstring
1 = auto-number w/ docstring
2+ = needs custom __init__
"""
if len(args) == 1 and isinstance(args[0], str):
self.__doc__ = args[0]
elif args:
raise TypeError('%s not dealt with -- need custom __init__' %
(args,))
class AddressSegment(AutoEnum):
misc = "not currently tracked"
ordinal = "N S E W NE NW SE SW"
secondary = "apt bldg floor etc"
street = "st ave blvd etc"
def huh(self):
return 'did I show up?'
--------------------------------------------------------------------------------
The 'huh' function, shown above, does *not* show up in a dir of either AutoEnum
nor AddressSegment, regardless of which class it is defined in -- this is
because a directory of an Enum class is meant to show ['__class__', '__doc__',
'__members__', '__module__'] + whatever Enum members have been defined.
However, a directory of an Enum member should show any normal methods*
available on that member. Currently, if 'huh' is defined in the final class it
will show up, but if defined in a superclass it will not.
That is the bug.
* 'normal method' means any method not prefixed by any underscores.
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue22506>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com