[Python-Dev] constant/enum type in stdlib
Glenn Linderman
glenn at nevcal.com
Sun Nov 28 02:04:49 CET 2010
On 11/27/2010 12:56 PM, Glenn Linderman wrote:
> On 11/27/2010 2:51 AM, Nick Coghlan wrote:
>> Not quite. I'm suggesting a factory function that works for any value,
>> and derives the parent class from the type of the supplied value.
>
> Nick, thanks for the much better implementation than I achieved; you
> seem to have the same goals as my implementation. I learned a bit
> making mine, and more understanding yours to some degree. What I
> still don't understand about your implementation, is that when adding
> one additional line to your file, it fails:
>
> w = named_value("ABC", z )
>
> Now I can understand why it might not be a good thing to make a named
> value of a named value (confusing, at least), but I was surprised, and
> still do not understand, that it failed reporting the __new__() takes
> exactly 3 arguments (2 given).
OK, I puzzled out the error, and here is a "cure" of sorts.
def __new__(cls, name, value):
try:
return base_type.__new__(cls, value)
except TypeError:
return base_type.__new__(cls, name, value)
def __init__(self, name, value):
self.__name = name
try:
super().__init__(value)
except TypeError:
super().__init__(name, value)
Probably it would be better for the except clause to raise a different
type of error ( Can't recursively create named value ) or to cleverly
bypass the intermediate named value, and simply apply a new name to the
original value. Hmm... For this, only __new__ need be changed:
def __new__(cls, name, value):
try:
return base_type.__new__(cls, value)
except TypeError:
return _make_named_value_type( type( value._raw() ))(
name, value._raw() )
def __init__(self, name, value):
self.__name = name
super().__init__(value)
Thanks for not responding too quickly, I figured out more, and learned more.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20101127/c2e071a0/attachment.html>
More information about the Python-Dev
mailing list