项目作者: vlakir

项目描述 :
Collection of useful decorators for python projects
高级语言: Python
项目地址: git://github.com/vlakir/funnydeco.git
创建时间: 2021-08-17T07:27:16Z
项目社区:https://github.com/vlakir/funnydeco

开源协议:GNU General Public License v3.0

下载


PyPi Version

FunnyDeco

Collection of useful decorators for python projects

Implements:

  1. Benchmarking util for methods
  2. Singleton pattern realisation for classes

Installation:

  1. pip install funnydeco

Examples:

1. Benchmark decorator

  1. from funnydeco import benchmark
  2. # noinspection PyUnusedLocal
  3. @benchmark
  4. def long_loop(print_benchmark=False, benchmark_name='') -> int:
  5. """
  6. Demo class for example of benchmark
  7. """
  8. result = 0
  9. for i in range(int(1e7)):
  10. result += i
  11. return result
  12. if __name__ == '__main__':
  13. print('With benchmark:')
  14. long_loop(print_benchmark=True, benchmark_name='Long loop procedure')
  15. print('Without benchmark:')
  16. long_loop()

2. Singleton decorator

  1. from funnydeco.core import singleton, SingletonReseter
  2. from time import sleep
  3. @singleton
  4. class SlowInitClass(SingletonReseter):
  5. """
  6. Demo class for example of singleton decorator
  7. """
  8. def __init__(self):
  9. self.variable = 1
  10. print("I'm sleeping...")
  11. sleep(3)
  12. print("I'v woken up!")
  13. if __name__ == '__main__':
  14. print('First dumbass init:')
  15. dumbass1 = SlowInitClass()
  16. print(f'variable={dumbass1.variable}')
  17. dumbass1.variable = 2
  18. print()
  19. print('Second dumbass init:')
  20. dumbass2 = SlowInitClass()
  21. print(f'variable={dumbass2.variable}')
  22. print()
  23. print('Third dumbass init:')
  24. print('Temporary stopping singleton behaviour')
  25. SlowInitClass().reset_singleton()
  26. dumbass3 = SlowInitClass()
  27. print(f'variable={dumbass3.variable}')
  28. dumbass3.variable = 3
  29. print()
  30. print('Fourth dumbass init:')
  31. dumbass4 = SlowInitClass()
  32. print(f'variable={dumbass4.variable}')
  33. print()

If you do not need to use reset_singleton functionality you may not to inherit your class from SingletonReseter