<br><br><div class="gmail_quote">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:0 0 0 .8ex;border-left:1px #ccc 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>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><br></div><div>And this is easy enough:</div><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><br></div><div>--- Bruce</div></div>