[Python-ideas] Add .= as a method return value assignment operator

Steven D'Aprano steve at pearwood.info
Thu Sep 27 22:49:11 EDT 2018

On Thu, Sep 27, 2018 at 09:47:42PM -0400, James Lu wrote:
> > I agree that this adds ambiguity where we can't be sure whether text .= 
> > encode('utf-8') is referring to the function or the method. We can infer 
> > that it *ought* to be the method, and maybe even add a rule to force 
> > that, but this works only for the simple cases. It is risky and error 
> > prone in the hard cases.
> I think it would be a good idea to treat all global name lookups as 
> lookups on the object on the LHS when you’re on the RHS of .=.

We would be innundated with questions and bug reports complaining that

    # earlier...
    argument = something()

    # later on
    myobj = MyClass()
    myobj .= method(argument)

fails with 

    AttributeError: 'MyClass' object has no attribute 'argument'

and people would be right to complain. That rule would mean you couldn't 
use builtins or module-level names on the right hand side of the .= 
operator. I call that a huge misfeature.

> This behavior prevents the worst mistakes and makes it very clear what 
> is happening.

Far from preventing mistakes, it would cause them, whenever somebody 
intended to use a builtin or module-level object, and accidently got a 
completely different attribute of the target object.


More information about the Python-ideas mailing list