[Python-Dev] Deprecate __ private (was Re: PEP 8 updates/clarifications)
Steve Holden
steve at holdenweb.com
Mon Dec 12 09:36:37 CET 2005
Tim Peters wrote:
> [Neal Norwitz]
>
>>I recently asked Guido about name mangling wrt Py3k. He definitely
>>wanted to keep it in. Unless he changed his mind, I doubt he would
>>deprecate it. His rationale was that there needs to be a way to
>>handle name collision with multiple inheritance.
>
>
> That wasn't quite it. The original motivation was to help avoid name
> collisions under inheritance period, and especially when writing a
> base class intended for subclassing by other parties, such as most
> mix-in classes. For example, if your utility or mixin base class `A`
> has a data member named `n`, nobody deriving from `A` dare name one of
> their data members `n` too, and it's unreasonable to expect everyone
> deriving from `A` to learn and avoid all the names `A` uses
> internally. It's even more unreasonable for A's author to have to
> promise, after A's first release, never to change the name of, or
> introduce any new, attribute (A's author dare not, lest the new name
> conflict with a name someone else's subclass used).
>
> If A's author names the attribute `__n` instead, all those problems go
> away, provided only that some subclass doesn't also name itself `A`.
>
> That was the only point to `__` name-mangling. People who think it's
> trying to, e.g., emulate C++'s `private` gimmick are enjoying a
> semi-private fantasy ;-) It works fine for its intended use.
In that case it would seem to make even *more* sense, theoretically, to
replace the class name in mangled names with a GUID, hence avoiding
collisions in similarly-named subclasses.
Then it would work even finer (though the mangled names would be longer,
and less meaningful in debugging).
mangling-things-by-typing-them-since-1967-ly y'rs - steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC www.holdenweb.com
PyCon TX 2006 www.python.org/pycon/
More information about the Python-Dev
mailing list