On Sep 29, 3:11 am, Bruno Desthuilliers <bruno. 42.desthuilli...@websiteburo.invalid> wrote: > Mark Dickinson a écrit : > > > > > On Sep 28, 9:37 am, Bruno Desthuilliers <bruno. > > 42.desthuilli...@websiteburo.invalid> wrote: > >> Joel Juvenal Rivera Rivera a écrit : > > >>> Yeah i forgot the self an try the code then i see > >>> an error that it was not defines _uno__a so that's > >>> where i define the global and see that behavior. > >> (snip) > >>>> Joel Juvenal Rivera Rivera wrote: > >>>>> Hi i was playing around with my code the i realize of this > >>>>> ################### > >>>>> _uno__a = 1 > >>>>> class uno(): > >>>>> __a = 2 > >>>>> def __init__(self): > >>>>> print __a > >>>>> uno() > >>>>> ################### > >>>>> and prints 1 > >> Looks like a bug to me. I Think you should fill a ticket... > > > I don't think it's a bug. Unless I'm missing something, > > it's the 'names in class scope are not accessible' gotcha, > > I would of course expect the class level name "__a" to be unreachable > from within __init__. What puzzle me is that local name "__a" (*not* > self.__a) in the __init__ resolves to the module level name "_uno__a". > > > The double underscores and name mangling are a red herring: > > I beg to disagree. The problem (well... what I think is a problem, > actually) IS that name mangling is applied to a method *local* variable.
It's not (__a is a global), and I'll opine that the behavior is more consistent and more easily explained the way it is. Consider the following: import foo class uno(object): def __init__(self): __bar = 1 foo.__bar = 1 Now you have to explain why __bar would be name-mangled when set in the foo module, but not when set in the current module. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list