On 23/01/17 01:52 PM, Gerald Britton wrote:
[snip]
>I propose `x .= y` -> `x = x . y`, for any `y`.
[snip]
I think you mean "any y that is a member of x"
Since it desugars into `x = x.y`, you can literally use anything for `y`.
x .= __call__().whatever().unwrap() * 3
is equivalent to
x = x.__call__().whatever().unwrap() * 3
and
x .= 1
is equivalent to
x = x.1
which is equivalent to
SyntaxError: invalid syntax
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)
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
This is why it's for use with **immutable** objects.
That's a problem with your original example:
>long_name = mkbuilder()
>long_name = long_name.seta(a)
>long_name = long_name.setb(b)
>y = long_name.build()
What do the methods seta and setb return? If they don't return
"self" you've got a problem. I think.
They don't return self. Ever. The value bound to long_name is immutable,
like an integer. They return a new instance.
FWIW why can't you just write:
x.y
or for your example:
long_name.seta(a)
?
See the IRC bot builder example, it should be more clear. (It's about
forking the builder.)
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/