mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	Issue 12086: add example showing how to use name mangling.
This commit is contained in:
		
						commit
						142d0f5e5a
					
				
					 1 changed files with 22 additions and 0 deletions
				
			
		| 
						 | 
					@ -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
 | 
					without regard to the syntactic position of the identifier, as long as it
 | 
				
			||||||
occurs within the definition of a class.
 | 
					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
 | 
					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
 | 
					possible to access or modify a variable that is considered private.  This can
 | 
				
			||||||
even be useful in special circumstances, such as in the debugger.
 | 
					even be useful in special circumstances, such as in the debugger.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue