[Python-ideas] The "in"-statement

Joshua Landau joshua.landau.ws at gmail.com
Mon Nov 5 23:05:33 CET 2012


On 5 November 2012 19:47, Bruce Leban <bruce at leapyear.org> wrote:

> On Mon, Nov 5, 2012 at 11:28 AM, Markus Unterwaditzer <
> markus at unterwaditzer.net> wrote:
>
>> While mocking objects, i got annoyed by the following code pattern i had
>> to
>> use when modifying multiple attributes on a single object::
>>
>>     obj.first_attr = "value"
>>     obj.second_attr = "value2"
>>
>>     some_other = "lel"
>>
>> I thought it would be neat if i could do::
>>
>>     in obj:
>>         first_attr = "value"
>>         second_attr = "value2"
>>
>>     some_other = "lel"  # indenting this would cause it to appear as an
>> attribute of obj
>>
>
> Hard to read, error-prone and ill-defined. Does it create new attributes
> or only change existing ones? What about identifiers on right hand sides?
> What would
>     third_attr = lambda: first_attr
> do?
>

My solution has always been:

.third_attr = lambda: .first_attr
.fourth_attr = not_attr

Although a single "." is hard for some [weaklings; pah!] to see.

It has exactly one use-case in my opinion:
def m(self, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
v, w, x, y, z):
    in self:
        .a, .b, .c, .d, .e, .f, .g, .h, .i, .j, .k, .l, .m, .n, .o, .p, .q,
.r, .s, .t, .u, .v, .w, .x, .y, .z = \
            a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u,
v, w, x, y, z

....not that having an excuse to do this is a good thing...

And this is easy enough:
>

> def multi_setattr(obj, **kwargs):
>     for k in kwargs:
>         setattr(obj, k, kwargs[k])
>
> multi_setattr(obj,
>     first_attr = "value",
>     second_attr = "value2")
>

TYVM for this, I'd never have thought of it.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20121105/6ff0e596/attachment.html>


More information about the Python-ideas mailing list