On 05/05/2013 01:01 AM, Glenn Linderman wrote:

The bigger problem is that the arithmetic on enumeration items, which seems 
like it should be inherited from NamedInt
(and seems to be, because the third value from each print is a NamedInt), doesn't pick up 
"x" or "y", nor does it pick
up "the-x" or "the-y", but rather, it somehow picks up the str of the value.

Indeed, the bigger problem is that we ended up have an (NamedInt, Enum) wrapping a NamedInt, so we had both NEI.x._intname /and/ NEI.x.value._intname, and it was just one big mess.

But I think it is solved.  Try the new code.  Here's what your example should 
look like:

    class NamedInt( int ):
        def __new__( cls, *args, **kwds ):
            _args = args
            name, *args = args
            if len( args ) == 0:
                raise TypeError("name and value must be specified")
            self = int.__new__( cls, *args, **kwds )
            self._intname = name
            return self
        @property
        def __name__( self ):
            return self._intname
        def __repr__( self ):
            # repr() is updated to include the name and type info
            return "{}({!r}, {})".format(type(self).__name__,
                                         self.__name__,
                                         int.__repr__(self))
        def __str__( self ):
            # str() is unchanged, even if it relies on the repr() fallback
            base = int
            base_str = base.__str__
            if base_str.__objclass__ is object:
                return base.__repr__(self)
            return base_str(self)
        # for testing, we only define one operator that propagates expressions
        def __add__(self, other):
            temp = int( self ) + int( other )
            if isinstance( self, NamedInt ) and isinstance( other, NamedInt ):
                return NamedInt(
                    '({0} + {1})'.format(self.__name__, other.__name__),
                    temp )
            else:
                return temp

    class NEI( NamedInt, Enum ):
        x = ('the-x', 1 )
        y = ('the-y', 2 )

    NEI.x + NEI.y

--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to