In article <mailman.1077.1244061915.8015.python-l...@python.org>, Michael H. Goldwasser <goldw...@slu.edu> wrote: >On June 2, 2009, Aahz wrote: >>Michael Goldwasser: >>> >>>class A(object): >>> def __init__(self, aTag): >>> self.__aTag = aTag >>> self.__aList = [] >> >> IMO, your problem starts right here. Not only are you using customized >> attributes for each class, you're using class-private identifiers. You >> would vastly simplify your work if you switch to single-underscore >> attributes. > > I intentionally chose the class-private identifiers in my artificial > example to emphasize that I was looking for a solution in which > class B did not have to rely on particular knowledge of class A's > implementation. That said, switching to single-underscores does not > address the issue raised in the original post.
Not directly, but it does simplify possible solutions. For example, you could use a straightforward getattr() approach where the class contains an attribute listing all the deep-copyable attributes. You could even use name-munging so that attributes can have an accompanying ATTR_deepcopy() method for custom code so that your main __deepcopy__ method stays the same in subclasses. (Obviously, this trick does in fact still work if you use private attributes and do the name-mangling yourself, but I find that distasteful for production code unless it's absolutely required.) -- Aahz (a...@pythoncraft.com) <*> http://www.pythoncraft.com/ "Given that C++ has pointers and typecasts, it's really hard to have a serious conversation about type safety with a C++ programmer and keep a straight face. It's kind of like having a guy who juggles chainsaws wearing body armor arguing with a guy who juggles rubber chickens wearing a T-shirt about who's in more danger." --Roy Smith, c.l.py, 2004.05.23 -- http://mail.python.org/mailman/listinfo/python-list