On Jul 15, 11:03 pm, Steven D'Aprano <steve +comp.lang.pyt...@pearwood.info> wrote: > On Sun, 15 Jul 2012 22:15:13 -0400, Devin Jeanpierre wrote:
> It boggles my mind that people who are perfectly happy to program to an > interface or protocol when it comes to (say) iterables, numbers or even > big complex classes with dozens of methods, suddenly freak out at the > thought that you can say "if obj" and obj is duck-typed. "if obj" is in essence doing "if bool(obj)" behind the scenes. My question is: Why hide such valuable information from the reader? It's obvious that "if bool(obj)" will return a boolean; whereas "if obj" is ambiguous. > There's a distinct lack of concrete, actual problems from duck-typing > bools, and a heavy over-abundance of strongly-held opinion that such a > thing is self-evidently wrong. If the multitudes of misunderstandings from "if obj" on this list have not convinced you yet, then i lack the energy to educate you! > > As far as I know, the only use of having a polymorphic boolean > > conversion is reducing the amount of typing we do. > > The same could be said about *every* polymorphic function. For which "bool" IS! Wikipedia to the rescue: """In computer science, polymorphism is a programming language feature that allows values of different data types to be handled using a uniform interface. The concept of parametric polymorphism applies to both data types and functions. A function that can evaluate to or be applied to values of different types is known as a polymorphic function.""" bool("a") -> True bool(0) -> False bool([1,2,3]) -> True bool(True) -> True > The benefit is not just because you don't wear out your keyboard as fast. > The benefit is the same for all other polymorphic code: it lets you write > better code faster with fewer bugs and less need for unnecessary type > restrictions. There are NO type restrictions for bool. > If there are a few corner cases where you actually *need* to restrict the > type of your flags to a actual bool, well, Python gives you the tools to > do so. Yes, the bool() -- http://mail.python.org/mailman/listinfo/python-list