Gerard Flanagan wrote: > I tried that Steve but it didn't work, and i don't think I can do what > I want in any case. There is no method '__write' in the base class, it > is only declared as an instance attribute in the constructor, like so: > > def __init__(self, file, encoding="us-ascii"): > ... > self.__write = file.write > ... > > I tried putting '__write = None' at the class level (in the base class > XMLWriter) but then, although '_XMLWriter__write' appears in > 'dir(HtmlWriter)', I get 'NoneType is not callable'. > > I also tried 'def __write(self, text) : pass ' in the base class, but > then the code runs but doesn't write the text I want - and anyway, if > I'm going to change the base class, then i may as well just add the > 'write_raw' method to the base directly! > > It's just some toy code at any rate, and I've learnt something new! > Thanks for your reply. > > Gerard >
Make sure you're calling the super's constructor before you try and access the mangled member. Then (I forgot this part), you can just call the mangled member from `self'. Example follows. <foo.py> class A(object): def __init__(self): self.__foo = lambda x, y : x + y class B(A): def __init__(self, x, y): # Make sure you're calling the super's constructor first. super(B, self).__init__() self.sum = self._A__foo(x, y) </foo.py> >>> import foo >>> b = foo.B(3, 4) >>> b.sum 7 >>> -- Steve Juranich Tucson, AZ USA -- http://mail.python.org/mailman/listinfo/python-list