]> granicus.if.org Git - python/commitdiff
Issue 12086: add example showing how to use name mangling.
authorRaymond Hettinger <python@rcn.com>
Sat, 25 Jun 2011 14:30:39 +0000 (16:30 +0200)
committerRaymond Hettinger <python@rcn.com>
Sat, 25 Jun 2011 14:30:39 +0000 (16:30 +0200)
Doc/tutorial/classes.rst

index a328ab23a2e7e6efabae4aa30cc58becdc37961b..bf1e26e123128c1082ebac397cbf43211a087074 100644 (file)
@@ -595,6 +595,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.