Toby Dickenson wrote:
I have a counterexample. Consider refactoring a class from....

class B(A):
    etc

....into....

class C(A):
    etc
class B(C):
    etc

Usage of some double-undescore attributes moved from B to the new intermediate base class C. Unit tests on B still passed, so that change is safe. right?

The problem occured because the double-underscore mangling uses the class name, but ignores module names. A related project already had a class named C derived from B (same name - different module). My refactoring caused aliasing of some originally distinct double-underscore attributes.

Very interesting. I hadn't ever really thought about it, but I guess this shows that even __-mangling won't solve all of the attribute-renaming problems...


A somewhat related problem is briefly discussed in Guido's autosuper example:
http://www.python.org/2.2.3/descrintro.html#metaclass_examples
where a base class derived from a class using autosuper but with the same name as the superclass might get the wrong self.__super.


Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to