On Thu, Jul 4, 2013 at 3:32 PM, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > Accidental shadowing can be a problem, but I've never heard of anyone > saying that they were *forced* to shadow a global they needed access to. > Just pick a different name.
Here's one example of shadowing that comes from a C++ project at work. I have a class that represents a database transaction (constructing it begins a transaction, it has methods for doing queries, and its destructor rolls back). There's also a class for a subtransation (same thing, but it uses savepoints within the transaction). So to bracket a piece of code in a subtransaction, I want to declare a new subtransaction object with the same name as the outer transaction object, and then dispose of it and "reveal" the original. There will always be an object called "trans", and it will always be the appropriate transaction to do queries on, but it'll change what it is. ChrisA -- http://mail.python.org/mailman/listinfo/python-list