Python 3 Object-oriented Programming: Building robust and maintainable software with object oriented design patterns in Python, 2nd Edition