class Parent(object):
    def meth(self):
        print("METH")

class Child(Parent):
    pass

def trace(frame, event, args):
    # Thanks to Aleksi Torhamo for code and idea.
    co = frame.f_code
    fname = co.co_name
    if not co.co_varnames:
        return
    locs = frame.f_locals
    first_arg = co.co_varnames[0]
    if co.co_argcount:
        self = locs[first_arg]
    elif co.co_flags & 0x04:    # *args syntax
        self = locs[first_arg][0]
    else:
        return

    func = getattr(self, fname).__func__
    if hasattr(func, '__qualname__'):
        qname = func.__qualname__
    else:
        for cls in self.__class__.__mro__:
            f = cls.__dict__.get(fname, None)
            if f is None:
                continue
            if f is func:
                qname = cls.__name__ + "." + fname
                break
    print("{}: {}.{} {}".format(event, self, fname, qname))
    return trace

import sys
sys.settrace(trace)

Child().meth()
