Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from timeit import timeit
- from random import randint
- class Base(object):
- pass
- class Derived1(Base):
- pass
- class Derived2(Derived1):
- def __init__(self):
- super(Derived2, self).__init__()
- self.d = {i + 10: i * 35 for i in range(100)}
- def get_item_exists(self):
- return self.d.get(randint(10, 109), None)
- def get_item_not_exists(self):
- return self.d.get(randint(200, 299), None)
- def try_item_exists(self):
- return self.d[randint(10, 109)]
- def try_item_not_exists(self):
- return self.d[randint(200, 299)]
- class Basey(object):
- pass
- derived = Derived2()
- def using_get(base_cls, meth):
- if isinstance(derived, base_cls):
- item = getattr(derived, meth)()
- if item is not None:
- return 1
- else:
- return 2
- else:
- return 2
- def using_hasattr_with_try(meth):
- f = getattr(derived, meth, None)
- if f is None:
- return 2
- try:
- return f()
- except KeyError:
- return 2
- def using_hasattr_with_get(meth):
- f = getattr(derived, meth, None)
- if f is None:
- return 2
- if f() is not None:
- return 1
- else:
- return 2
- def using_try(meth):
- try:
- return getattr(derived, meth)()
- except (AttributeError, KeyError):
- return 2
- number = 100000
- print('Using get')
- print(timeit(stmt='using_get(Base, "get_item_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_get(Base, "get_item_not_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_get(Basey, "get_item_exists")', globals=globals(), number=number))
- print('Using try')
- print(timeit(stmt='using_try("try_item_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_try("try_item_not_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_try("crapshoot")', globals=globals(), number=number))
- print('Using hasattr with try')
- print(timeit(stmt='using_hasattr_with_try("try_item_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_hasattr_with_try("try_item_not_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_hasattr_with_try("crapshoot")', globals=globals(), number=number))
- print('Using hasattr with get')
- print(timeit(stmt='using_hasattr_with_get("get_item_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_hasattr_with_get("get_item_not_exists")', globals=globals(), number=number))
- print(timeit(stmt='using_hasattr_with_get("crapshoot")', globals=globals(), number=number))
Add Comment
Please, Sign In to add comment