On Thu, Sep 22, 2016 at 10:33 PM, BartC <b...@freeuk.com> wrote: >>> print (10<20) => True >>> print (type(10<20)) => <class 'bool'> >> >> >> 10<20 shouldn't be thought of as some alternative value which is a bool, >> any >> more than we should think of 1+1 as being a different value to 2. > > > They're a little different: > > 1+1 yielding 2 is int+int => int > 10<20 yielding True is int<int => bool
That's a couple of example expressions and the way they're handled. > My post was really about bool values lurking everywhere not just where you > explicitly write or assign True or False. Sure. Thing is, those expressions are actually just syntactic sugar for functions. Let's replace the integers with these puppies: class Spam: def __init__(self, value): self.value = value def __repr__(self): return "Spam(%r)" % self.value def __add__(self, other): return Spam(self.value + other.value) def __lt__(self, other): if self.value < other.value: return "Yes, %r < %r" % (self.value, other.value) return "" >>> Spam(1) + Spam(1) Spam(2) >>> Spam(10) < Spam(20) 'Yes, 10 < 20' >>> Spam(10) > Spam(20) '' This is perfectly legal code, and it doesn't use True or False for its comparisons. If you want it to, you have to actually return one of those constants from __lt__, either by explicitly typing its name, or by passing it up the chain (eg "return self.value < other.value"), which just moves the problem around. ChrisA -- https://mail.python.org/mailman/listinfo/python-list