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

Reply via email to