On Thu, 25 Apr 2013 08:36:34 -0400, Roy Smith wrote: > In article <5178b1db$0$29977$c3e8da3$54964...@news.astraweb.com>, > Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > >> The semantics of NotImplemented is that it is a signal for one object >> to say "I don't know how to do this, let somebody else try". > > That's precisely the logic here. The rule says, "I don't know how to > tell you if this is OK or not, ask another rule".
Sounds good to me then. It looks like your design is actually much closer to what I believe the standard Python semantics are intended to be than it appeared at first. [...] > Here's what the docs say about NotImplemented: > >> This type has a single value. There is a single object with this value. >> This object is accessed through the built-in name NotImplemented. >> Numeric methods and rich comparison methods may return this value if >> they do not implement the operation for the operands provided. (The >> interpreter will then try the reflected operation, or some other >> fallback, depending on the operator.) Its truth value is true. > > It gives an example of a use by numeric methods. It doesn't say that's > the only thing it can be used for. Right. You can do a lot of things in Python, including shooting your foot off :-) but that doesn't mean you should. The further away from standard Python conventions you get, the more wary you should be. That's all. > It also says, "Its truth value is true". Why would they document that > fact if you weren't supposed to use it as a boolean operand? You can use *anything* in Python in a boolean context. That's a language feature: all objects are either truthy or falsey. As for why it is documented for NotImplemented, I guess that's because some people might guess that it is falsey, like None. -- Steven -- http://mail.python.org/mailman/listinfo/python-list