On 5 November 2012 19:47, Bruce Leban <span dir="ltr"><<a href="mailto:bruce@leapyear.org" target="_blank">bruce@leapyear.org</a>></span> wrote:<div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div class="gmail_quote"><div class="im">On Mon, Nov 5, 2012 at 11:28 AM, Markus Unterwaditzer <span dir="ltr"><<a href="mailto:markus@unterwaditzer.net" target="_blank">markus@unterwaditzer.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

While mocking objects, i got annoyed by the following code pattern i had to<br>
use when modifying multiple attributes on a single object::<br>
<br>
    obj.first_attr = "value"<br>
    obj.second_attr = "value2"<br>
<br>
    some_other = "lel"<br>
<br>
I thought it would be neat if i could do::<br>
<br>
    in obj:<br>
        first_attr = "value"<br>
        second_attr = "value2"<br>
<br>
    some_other = "lel"  # indenting this would cause it to appear as an attribute of obj<br></blockquote><div><br></div></div><div>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</div>



<div>    third_attr = lambda: first_attr</div><div>do?</div></div></blockquote><div> </div><div>My solution has always been:</div><div><br></div><div>.third_attr = lambda: .first_attr</div><div>.fourth_attr = not_attr</div>

<div><br></div><div>Although a single "." is hard for some [weaklings; pah!] to see.</div><div><br></div><div>It has exactly one use-case in my opinion:</div><div>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):</div>

<div>    in self:</div><div>        .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 = \</div><div>            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</div>

<div><br></div><div>....not that having an excuse to do this is a good thing...</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div class="gmail_quote"><div>And this is easy enough:</div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div class="gmail_quote"><div><br></div><div>def multi_setattr(obj, **kwargs):</div><div>    for k in kwargs:</div><div>        setattr(obj, k, kwargs[k]) </div>

<div><br></div><div>multi_setattr(obj,</div><div>    first_attr = "value",</div><div>    second_attr = "value2")</div></div></blockquote><div><br></div><div>TYVM for this, I'd never have thought of it. </div>

</div></div>