Do deep inheritance trees degrade efficiency?

Peter Otten __peter__ at web.de
Thu Mar 19 05:14:01 EDT 2009


Anthra Norell wrote:

> Would anyone who knows the inner workings volunteer to clarify whether
> or not every additional derivation of a class hierarchy adds an
> indirection to the base class's method calls and attribute read-writes.
> In C++, I suppose, a three-level inheritance would resolve into
> something like *(*(*(*(base_class_method ())))).

I think in C++ the compiler can often resolve the correct class statically.
Python currently walks through the entire hierarchy.

$ cat inherit.py
class A(object):
    def m(self):
        return 42


B = A
for i in range(1000):
    class B(B): pass

a = A()
b = B()

if __name__ == "__main__":
    print a.m()
    print b.m()

$ python -m timeit -s"from inherit import a" "a.m"
10000000 loops, best of 3: 0.173 usec per loop
$ python -m timeit -s"from inherit import b" "b.m"
10000 loops, best of 3: 68.7 usec per loop

Peter



More information about the Python-list mailing list