[Python-ideas] Non-boolean return from __contains__

Cameron Simpson cs at zip.com.au
Wed Jul 28 00:10:48 CEST 2010


On 27Jul2010 16:59, Guido van Rossum <guido at python.org> wrote:
| On Tue, Jul 27, 2010 at 3:29 PM, Mathias Panzenböck
| <grosser.meister.morti at gmx.net> wrote:
| > On 07/26/2010 04:20 AM, Alex Gaynor wrote:
| >>
| >> Fundamentally the argument in favor of it is the same as for the other
| >> comparison operators: you want to do symbolic manipulation using the
| >> "normal" syntax, as a DSL.  My example is that of a SQL expression
| >> builder: SQLAlchemy uses User.id == 3 to create a clause where the ID
| >> is 3, but for "id in [1, 2, 3]" it has: User.id.in_([1, 2, 3]), which
| >> is rather unseamly IMO (at least as much as having User.id.eq(3) would
| >> be).
| >>
| >
| > This is a bad example for your wish because this code:
| >>>> id in [1, 2, 3]
| >
| > translates into:
| >>>> [1, 2, 3].__contains__(id)
| >
| > So it doesn't help that 'in' may return something else than a bool
| > because the method is called on the wrong object for your purposes.
| 
| Well that pretty much kills the proposal. I can't believe nobody
| (including myself) figured this out earlier in the thread. :-(

That's a real shame.

".__rcontains__", anyone?

For the record (since I just said +0.5 to +1), I'm down to +0 on the
proposal; I think the idea's good and removes an (to my mind) arbitrary
constraint on __contains__, but now I haven't got a use case:-(

Alex's "id in wrapper([1,2,3])" doesn't seem better than the existing
"column.in_([1,2,3])" that already exists, alas.

Cheers,
-- 
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/

"Are we alpinists, or are we tourists" followed by "tourists! tourists!"
        - Kobus Barnard <kobus at cs.sfu.ca> in rec.climbing,
          on things he's heard firsthand



More information about the Python-ideas mailing list