That does it!, thanks. Thinking about it, when I created a derived class with an __init__ method, I overrode the base class's init. It should have been intuitive that I needed to explicitly call baseclass.__init(self), it wasn't. It might have hit me if the fault was related to someting in baseclass.__init() not taking place, but the recursion loop didn't give me a clue. Any idea why failing to init the base class caused the loop?
Bill Christopher Subich wrote: > William Gill wrote: > >> O.K. I tried from scratch, and the following snippet produces an >> infinite loop saying: >> >> File "C:\Python24\lib\lib-tk\Tkinter.py", line 1647, in __getattr__ >> return getattr(self.tk, attr) >> >> If I comment out the __init__ method, I get the titled window, and >> print out self.var ('1') >> >> >> import os >> from Tkinter import * >> >> class MyApp(Tk): >> var=1 >> def __init__(self): >> pass >> def getval(self): >> return self.var >> >> >> app = MyApp() >> >> app.title("An App") >> print app.getval() >> app.mainloop() > > > You're not calling the parent's __init__ inside your derived class. I > would point out where the Python Tutorial points out that you should do > this, but it's not in the obvious place (Classes: Inheritance). > > Python does -not- automagically call parent-class __init__s for derived > classes, you must do that explicitly. Changing the definition of your > class to the following works: > >>> class MyApp(Tk): > var=1 > def __init__(self): > Tk.__init__(self) > pass > def getval(self): > return self.var > > It works when you comment out __init__ because of a quirk in Python's > name resolution. As you'd logically expect, if you don't define a > function in a derived class but call it (such as instance.method()), it > will call the method from the base class. > > You just proved that this works for __init__ methods also. When you > didn't define __init__ for your derived class, MyApp() called > Tk.__init__(), which Does the Right Thing in terms of setting up all the > specific Tkinter-specific members. -- http://mail.python.org/mailman/listinfo/python-list