Advanced Python: Best Practices and Design Patterns (APBPDP) – Outline

Detailed Course Outline

Object-Oriented Programming in Python

  • Extending classes to define subclasses
  • Inheriting from multiple superclasses and mix-in classes
  • Adding properties to a class
  • Defining abstract base classes

Exploring Python Features

Writing "Pythonic" code

  • Customising iteration and indexing with "magic" methods
  • Modifying code dynamically with monkey patching

Handling Exceptions

  • Raising user-defined exceptions
  • Reducing code complexity with context managers and the "with" statement

Verifying Code and Unit Testing

Testing best practices

  • Developing and running Python unit tests
  • Simplifying automated testing with the Nose package

Verifying code behaviour

  • Mocking dependent objects with the Mock package
  • Asserting correct code behaviour with MagicMock

Detecting Errors and Debugging Techniques

Identifying errors

  • Logging messages forauditing and debugging
  • Checking your code for potential bugs with Pylint

Debugging Python code

  • Extracting error information from exceptions
  • Tracing program execution with the PyCharm IDE

Implementing Python Design Patterns

Structural patterns

  • Implementing the Decorator pattern using @decorator
  • Controlling access to an object with the Proxy pattern

Behavioural patterns

  • Utilising the Iterator pattern with Python generators
  • Laying out a skeleton algorithm in the Template Method pattern
  • Enabling loose coupling between classes with the Observer pattern

Interfacing with REST Web Services and Clients

Python REST web services

  • Building a REST service
  • Generating JSON responses to support Ajax clients

Python REST clients

  • Sending REST requests from a Python client
  • Consuming JSON and XML response data

Measuring and Improving Application Performance

Measuring Application Execution

  • Timing execution of functions with the "timeit" module
  • Profiling program execution using "cProfile"
  • Manipulating an execution profile interactively with "pstats"

Employing Python language features for performance

  • Efficiently applying data structures, including lists, dictionaries and tuples
  • Mapping and filtering data sets using comprehensions
  • Replacing the standard Python interpreter with PyPy

Installing and Distributing Modules

Managing module versions

  • Installing modules from the PyPi repository using "pip"
  • Porting code between Python versions

Packaging Python modules and applications

  • Establishing isolated Python environments with "virtualenv"
  • Building a distribution package with "setuptools"
  • Uploading your Python modules to a local repository

Concurrent Execution

Lightweight threads

  • Creating and managing multiple threads of control with the Thread class
  • Synchronising threads using locks

Heavy-weight processes

  • Launching operating system commands as subprocesses
  • Synchronising processes with queues
  • Parallelising execution using process pools and Executors