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.
_______________________________________________
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