[Python-Dev] PEP 435 - ref impl disc 2 (original) (raw)
Ethan Furman ethan at stoneleaf.us
Tue May 7 03:26:56 CEST 2013
- Previous message: [Python-Dev] PEP 435 - ref impl disc 2
- Next message: [Python-Dev] PEP 435 - ref impl disc 2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message: [Python-Dev] PEP 435 - ref impl disc 2
- Next message: [Python-Dev] PEP 435 - ref impl disc 2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]