From fd1cb59618b6093d88a6c2f1ffea1656e87dfce3 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 25 Jun 2011 16:28:07 +0200 Subject: [PATCH] Issue 12086: add example showing how to use name mangling. --- Doc/tutorial/classes.rst | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst index 5ee90677846..f9a2d114002 100644 --- a/Doc/tutorial/classes.rst +++ b/Doc/tutorial/classes.rst @@ -553,6 +553,28 @@ current class name with leading underscore(s) stripped. This mangling is done without regard to the syntactic position of the identifier, as long as it occurs within the definition of a class. +Name mangling is helpful for letting subclasses override methods without +breaking intraclass method calls. For example:: + + class Mapping: + def __init__(self, iterable): + self.items_list = [] + self.__update(iterable) + + def update(self, iterable): + for item in iterable: + self.items_list.append(item) + + __update = update # private copy of original update() method + + class MappingSubclass(Mapping): + + def update(self, keys, values): + # provides new signature for update() + # but does not break __init__() + for item in zip(keys, values): + self.items_list.append(item) + Note that the mangling rules are designed mostly to avoid accidents; it still is possible to access or modify a variable that is considered private. This can even be useful in special circumstances, such as in the debugger.