On Mon, 17 May 2010 06:35:11 -0700, mouadino wrote: >> There's no such thing as a "private" attribute in Python. The >> name-mangling mechanism invoked by "__name" is really meant to avoid >> accidental redefinition of the attribute in a derived class. > >> In this case, your attribute is expected to be redefined, so you >> definitly don't want any name mangling here. > > yes , but what i have supposed is that the name mangling will not be > applied when you use abc especially when you decorate the function with > abc.abstractmethod , because it's will(should) be redefined (so > something is wrong with the abc module) .
No, your expectations are wrong. Name mangling works the same no matter what class, whether you are using ABCs or not. >> Also and FWIW, the naming convention for "implementation attributes" is >> a single leading underscore > > sorry but i don't agree on this. the two underscore (__) are used in > classes level for defining private method in the python way, and the one > underscore (_) is used in the module level : Whether you agree or not, single underscores are commonly used as the convention for private methods and attributes. See PEP 8, which is written by Python's creator, Guido van Rossum: http://www.python.org/dev/peps/pep-0008/ > """Prepending a single underscore (_) has some support for protecting > module variables and functions (not included with import * from). > Prepending a double underscore (__) to an instance variable or method > effectively serves to make the variable or method private to its class > (using name mangling). """ > src:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html If that's what it says, it's wrong, because there's nothing "effective" about double-underscore privacy. It's a very weak, easily bypassed (deliberately and accidentally) form of privacy, and it complicates debugging. Generally, most people here recommend you ignore leading double- underscores and just flag your methods as "private by convention" with a single leading underscore. -- Steven -- http://mail.python.org/mailman/listinfo/python-list