On 26/04/13 09:56, MRAB wrote:
On the one hand, NoneType(None) seems a strange thing to do.
Only when you write it out like that as constants. It's no more, or less, strange than str('spam') or int(1) or list([]). Why would you do that? But as soon as you think of it in general terms: some_type(some_instance) that's a pretty normal thing to do. And if it just so happened that some_instance were an instance of some_type, it would be surprising if the call failed. (I initially wrote "astonishing", but then I realised that some types take more than one argument, e.g. FunctionType. So it's merely surprising.)
On the other hand: type(value)(value) == value would return True for the built-in types (will certain exceptions, such as when value is float("NaN")).
Not an exception, that works fine in 3.3:
value = float('nan') type(value)(value)
nan
Let's ask the Zen: Special cases aren't special enough to break the rules. Although practicality beats purity.
I cannot think of any use-case where I would actively want NoneType(None) to fail. That would be like having bool(True) raise an exception. On the other hand, NoneType(x) for any other x ought to fail. -- Steven _______________________________________________ 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