Mercurial > cpython-lru_cache-weakref
diff Doc/tutorial/classes.rst @ 70973:68bc3c5960a4 2.7
Issue 12086: add example showing how to use name mangling.
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Sat, 25 Jun 2011 16:28:07 +0200 |
| parents | 3d0a41407abf |
| children | 140e4800110b |
line wrap: on
line diff
--- a/Doc/tutorial/classes.rst Sat Jun 25 14:57:06 2011 +0200 +++ b/Doc/tutorial/classes.rst Sat Jun 25 16:28:07 2011 +0200 @@ -553,6 +553,28 @@ 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.
