On Jul 16, 2007, at 12:53 AM, Michele Simionato wrote: > On Jul 16, 7:18 am, Erik Jones <[EMAIL PROTECTED]> wrote: >> On Jul 15, 2007, at 11:23 PM, Michele Simionato wrote: >> >>> On Jul 16, 5:51 am, Erik Jones <[EMAIL PROTECTED]> wrote: >>>> Say you're given a call event frame for a method call. How can you >>>> tell if the code being executed came from a super class of the >>>> object >>>> or class the method was called on? >> >>>> Erik Jones >> >>> You look if the method was defined in self.__class__.__dict__. >> >>> Michele Simionato >> >> That doesn't seem to cover calling super class __init__ methods. >> > > I am probably missing something. In the following code the > method check_init checks if the current instance > possess an __init__ or if it just inherits one > from the ancestors. Is this what you want? > > class B(object): > def __init__(self): > 'something' > def check_init(self): > if '__init__' in self.__class__.__dict__: > print 'possesses __init__' > else: > print 'inherits __init__' > > class C(B): > 'something else' > def __init__(self): > print 'calling C.__init__' > > class D(B): > pass > > c = C() > d = D() > > c.check_init() #possesses __init__ > d.check_init() #inherits __init__
Ok, I see how I was pretty vague with my original questions. Given the pattern where you need to call a base class's constructor (or, other overriden method of the same name as that being called on the child class object): class A(object): def __init__(self): print self.__class__.__name__ class B(A): def __init__(self): A.__init__(self) print self.__class__.__name__ B() This will output: B B How can I get A B Erik Jones Software Developer | Emma® [EMAIL PROTECTED] 800.595.4401 or 615.292.5888 615.292.0777 (fax) Emma helps organizations everywhere communicate & market in style. Visit us online at http://www.myemma.com -- http://mail.python.org/mailman/listinfo/python-list