<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p><br>
</p>
<br>
<div class="moz-cite-prefix">On 23/01/17 02:56 PM, Gerald Britton
wrote:<br>
</div>
<blockquote
cite="mid:CAPxRSnaTxQ6FLb=8Tp=Wfd0bPH9_R-1Mhrver64tNEhQQdQ=NA@mail.gmail.com"
type="cite">
<div dir="auto">
<div><br>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Jan 23, 2017 11:07 AM, "Soni L."
<<a moz-do-not-send="true"
href="mailto:fakedme%2Bpy@gmail.com">fakedme+py@gmail.com</a>>
wrote:<br type="attribution">
<blockquote class="quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div class="quoted-text">
<p><br>
</p>
<br>
<div class="m_777232734411745806moz-cite-prefix">On
23/01/17 01:52 PM, Gerald Britton wrote:<br>
</div>
<blockquote type="cite">
<div dir="auto">
<div><br>
<div class="gmail_quote"><br>
<br type="attribution">
<blockquote
class="m_777232734411745806quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div link="blue" vlink="purple"
lang="EN-US">
<div
class="m_777232734411745806m_-1291826450300598312WordSection1">
<p class="MsoNormal">[snip]</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span>>I
propose `x .= y` -> `x = x .
y`, for any `y`.</span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">[snip]</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">I think you mean
"any y that is a member of x" </p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<br>
</div>
Since it desugars into `x = x.y`, you can literally
use anything for `y`.<br>
<br>
x .= __call__().whatever().unwrap() * 3<br>
<br>
is equivalent to<br>
<br>
x = x.__call__().whatever().<wbr>unwrap() * 3<br>
<br>
and<br>
<br>
x .= 1<br>
<br>
is equivalent to<br>
<br>
x = x.1<br>
<br>
which is equivalent to<br>
<br>
SyntaxError: invalid syntax
<div class="quoted-text"><br>
<br>
<blockquote type="cite">
<div dir="auto">
<div>
<div class="gmail_quote">
<blockquote
class="m_777232734411745806quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div link="blue" vlink="purple"
lang="EN-US">
<div
class="m_777232734411745806m_-1291826450300598312WordSection1">
<p class="MsoNormal"> </p>
<p class="MsoNormal">Also, note that
this syntax means that x will be
rebound to the result of calling
x.y, whatever that is (frequently,
None, for mutating methods)</p>
<p class="MsoNormal">In general, you
can't count on methods to return
references to their instances, even
though it's handy for fluent coding,
so this side effect may be
unexpected to some</p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<br>
</div>
This is why it's for use with **immutable** objects.
<div class="quoted-text"><br>
<br>
<blockquote type="cite">
<div dir="auto">
<div>
<div class="gmail_quote">
<blockquote
class="m_777232734411745806quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div link="blue" vlink="purple"
lang="EN-US">
<div
class="m_777232734411745806m_-1291826450300598312WordSection1">
<p class="MsoNormal"> </p>
<p class="MsoNormal">That's a problem
with your original example:</p>
<p class="MsoNormal"> </p>
<pre><span style="color:black">>long_name = mkbuilder()</span></pre>
<pre><span style="color:black">>long_name = long_name.seta(a)</span></pre>
<pre><span style="color:black">>long_name = long_name.setb(b)</span></pre>
<pre><span style="color:black">>y = long_name.build()</span></pre>
<p class="MsoNormal"> </p>
<p class="MsoNormal">What do the
methods seta and setb return? If
they don't return "self" you've got
a problem. I think.</p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
<br>
</div>
They don't return self. Ever. The value bound to
long_name is immutable, like an integer. They return a
new instance.</div>
</blockquote>
</div>
</div>
</div>
<div dir="auto"><br>
</div>
<div dir="auto">Then long_name isn't immutable. It changes with
every line. That can lead to nasty bugs if you count on its
immutability.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Easy to see. Just print long_name after each
call.</div>
</div>
</blockquote>
<br>
You're mixing up value immutability with name immutability. The name
isn't immutable, but:<br>
<br>
long_name = mkbuilder()<br>
x = long_name<br>
long_name .= seta("a")<br>
y = long_name<br>
long_name .= setb("b")<br>
z = long_name<br>
print(x) # a = None, b = None<br>
print(y) # a = "a", b = None<br>
print(z) # a = "a", b = "b"<br>
print(x is y) # False<br>
print(x is z) # False<br>
print(y is z) # False<br>
print(long_name is z) # True<br>
<br>
See also:<br>
<br>
long_name = 1<br>
x = long_name<br>
long_name += 1<br>
y = long_name<br>
long_name += 1<br>
z = long_name<br>
print(x) # 1<br>
print(y) # 2<br>
print(z) # 3<br>
print(x is y) # False<br>
print(x is z) # False<br>
print(y is z) # False<br>
print(long_name is z) # True<br>
<blockquote
cite="mid:CAPxRSnaTxQ6FLb=8Tp=Wfd0bPH9_R-1Mhrver64tNEhQQdQ=NA@mail.gmail.com"
type="cite">
<div dir="auto">
<div dir="auto">
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div class="quoted-text"><br>
<br>
<blockquote type="cite">
<div dir="auto">
<div>
<div class="gmail_quote">
<blockquote
class="m_777232734411745806quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div link="blue" vlink="purple"
lang="EN-US">
<div
class="m_777232734411745806m_-1291826450300598312WordSection1">
<p class="MsoNormal"> </p>
<p class="MsoNormal">FWIW why can't
you just write:</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">x.y</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">or for your
example:</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"><span
style="color:black">long_name.seta(a)</span></p>
<p class="MsoNormal"><span
style="color:black"> </span></p>
<p class="MsoNormal"><span
style="color:black">?</span></p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
</blockquote>
<br>
</div>
See the IRC bot builder example, it should be more
clear. (It's about forking the builder.)<br>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>