[Python-ideas] Add .= as a method return value assignment operator
Brendan Barnwell
brenbarn at brenbarn.net
Thu Sep 27 22:50:06 EDT 2018
On 2018-09-27 03:48, Ken Hilton wrote:
> Would there be a dunder method handling this? Or since it's explicitly
> just a syntax for "obj = obj.method()" is that not necessary?
> My only qualm is that this might get PHP users confused; that's really
> not an issue, though, since Python is not PHP.
I'm opposed to this idea, precisely because there's no way to make a
dunder for it. Exiting augmented assignment operators work like this:
"LHS op= RHS" means "LHS = LHS.__iop__(RHS)" (where iop is iadd, isub,
etc.).
This can't work for a dot operator. If "LHS .= RHS" is supposed to
mean "LHS = LHS.RHS", then what is the argument that is going to be
passed to the dunder method? The proposed .= syntax is using the RHS as
the *name* of the attribute to be looked up, but for all existing
augmented assignments, the RHS is the *value* to be operated on.
As others pointed out elsewhere in the thread, the problem is
compounded if there are multiple terms in the RHS. What does "this .=
that + other" mean? What would be the argument passed to the dunder
function? Is the name of the relevant attribute supposed to be taken
from "that" or "other" or from the result of evaluating "that + other"?
I like the consistency of the existing augmented assignment operations;
they are just all syntactic sugar for the same pattern: LHS =
LHS.__iop__(RHS) . I'm opposed to the creation of things that look like
augmented assignment but don't follow the same pattern, which is what
this proposal does.
--
Brendan Barnwell
"Do not follow where the path may lead. Go, instead, where there is no
path, and leave a trail."
--author unknown
More information about the Python-ideas
mailing list