On Sunday, June 19, 2016 at 9:26:54 PM UTC+5:30, Ethan Furman wrote: > On 06/19/2016 08:14 AM, Michael Torrie wrote: > > On 06/19/2016 09:01 AM, Ethan Furman wrote: > >> On 06/19/2016 04:56 AM, Joonas Liik wrote: > >>> On 18 June 2016 at 23:47, Ethan Furman wrote: > >>>> On 06/18/2016 07:05 AM, Joonas Liik wrote: > > >>>>> the leading dot does not resolve the ambiguity that arises from: > >>>>> > >>>>> with ob_a: > >>>>> with ob_b: > >>>>> .attr_c = 42 # which object are we modifying right now? > >>>> > >>>> > >>>> The innermost one. Why would it be anything else? > >>> > >>> What if ob_b does not have attribute attr_c but ob_a does? > >> > >> Good question. I would say that _only_ the innermost with object is > >> searched, and if it doesn't have the requested attribute an > >> AttributeError is raised. Otherwise, as you say, it could be a > >> nightmare to maintain. > > > > But that wouldn't work either because it would make it impossible to > > *set* attributes on an object. > > Sure it would, just like any 'this_thing.whatever = 9' works just fine > if 'this_thing' doesn't already a `whatever` attribute. > > The only thing that would change is being able to omit the 'this_thing' > portion; if you want to access an earlier 'with' obj, then you must be > explicit: > > with ob_a: > with ob_b: > ob_a.whatever = 9 > .something_else = 10 > > > Python's dynamic nature just doesn't lend itself to this kind of ambiguity. > > This is no more ambiguous than any other nested structure and, in some > cases, even simpler.
Yes to be clear the idea is mostly syntactic: with ob_a : .some ... .other ... (maybe set or get ie lhs or rhs) desugars to ob_a.some ... ob_a.other ... And for an outer with the reach does not include and inner with Just as in C if you have a nested switch the scope of the case-labels of the outer excludes the inner -- https://mail.python.org/mailman/listinfo/python-list