How to determine which method was used in an inheritance heirarchy?

Michele Simionato michele.simionato at gmail.com
Mon Jul 16 01:53:40 EDT 2007


On Jul 16, 7:18 am, Erik Jones <e... at myemma.com> wrote:
> On Jul 15, 2007, at 11:23 PM, Michele Simionato wrote:
>
> > On Jul 16, 5:51 am, Erik Jones <e... at myemma.com> 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__




More information about the Python-list mailing list