#!/usr/bin/python import timeit, random, time, sys MULTIPLIER = 1 class A(object): def __init__(self, *args): pass class B(A): pass class C(B): pass class D(C): pass class E(D): pass class F(E): pass class G(F): pass class H(G): def __init__(self): pass class I(H): pass def test_init(tmp): tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__; tmp.__init__ def test_class(tmp): tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__; tmp.__class__ def test_has_init(tmp): hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') hasattr(tmp, '__init__'); hasattr(tmp, '__init__') def test_has_class(tmp): hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') hasattr(tmp, '__class__'); hasattr(tmp, '__class__') def test_has_intit(tmp): hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') hasattr(tmp, '__intit__'); hasattr(tmp, '__intit__') def test_has_klass(tmp): hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') hasattr(tmp, '__klass__'); hasattr(tmp, '__klass__') testclasses = [list, dict, tuple, A, B, C, D, E, F, G, H, I] list = list dict = dict tuple = tuple list_inst = list() dict_inst = dict() tuple_inst = tuple() A_inst = A() B_inst = B() C_inst = C() D_inst = D() E_inst = E() F_inst = F() G_inst = G() H_inst = H() I_inst = I() if __name__ == '__main__': print 'class class.__class__ class.__init__' + \ ' class().__class__ class().__init__' for cls in testclasses: name = cls.__name__ print name, sys.stdout.flush() print timeit.Timer('test_class(%s)' % name, 'from __main__ import test_class, %s' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_init(%s)' % name, 'from __main__ import test_init, %s' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_class(%s_inst)' % name, 'from __main__ import test_class, %s_inst' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_init(%s_inst)' % name, 'from __main__ import test_init, %s_inst' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print print print 'class hasattr(class,"__class__") hasattr(class,"__init__")' + \ ' hasattr(class(),"__class__") hasattr(class(),"__init__")' for cls in testclasses: name = cls.__name__ print name, sys.stdout.flush() print timeit.Timer('test_has_class(%s)' % name, 'from __main__ import test_has_class, %s' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_has_init(%s)' % name, 'from __main__ import test_has_init, %s' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_has_class(%s_inst)' % name, 'from __main__ import test_has_class, %s_inst' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_has_init(%s_inst)' % name, 'from __main__ import test_has_init, %s_inst' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print print print 'class hasattr(class,"__klass__") hasattr(class,"__intit__")' + \ ' hasattr(class(),"__klass__") hasattr(class(),"__intit__")' for cls in testclasses: name = cls.__name__ print name, sys.stdout.flush() print timeit.Timer('test_has_klass(%s)' % name, 'from __main__ import test_has_klass, %s' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_has_intit(%s)' % name, 'from __main__ import test_has_intit, %s' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_has_klass(%s_inst)' % name, 'from __main__ import test_has_klass, %s_inst' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print timeit.Timer('test_has_intit(%s_inst)' % name, 'from __main__ import test_has_intit, %s_inst' % name)\ .timeit(number=100000 * MULTIPLIER), sys.stdout.flush() print print