Concise syntax for attribute access and assignment: e.g., `obj.(a, b, c) = 1, 2, 3`

See also prior discussion of same idea (at least on left side for writing attributes).

This proposal adds right side for reading attributes which is good for symmetry :+1:

But the example with function calling does need fleshing out the scoping rules and what other content is allowed. Cause most function calls require some arguments — can you use any expression inside the call? Can you use operators at top level of the tuple?

delimiter = 'n'
"Banana".(split(delimiter), replace(delimiter, '_'), removesuffix('nana') + removeprefix('B'))

There delimiter tries to refer to variable from surrounding scope instead of an attribute of “Banana” but there is no static way to know that. Would Python have to dynamically check if it exists as attribute, and if not fall back to variable? IIRC that’s what JS with statement does and it got deprecated over time. That can hide bugs :-1: as user likely had only one interpretation in mind — either they meant a variable or an attribute, but not both.
But if you don’t allow variable references, your ability to call functions and build complex expressions is limited. Which is arguably good for readability, but having to draw the line somewhere means users will need to learn that line, by trying things and failing.

IMHO the whole scoping complication makes this too complex to be worth it.
A syntax covering only obj.(attr1, attr2) is reasonably simple, but is it adding enough value alone to be worth it?