Simple function classes 
       Challenge: functions with parameters 
       Representing a function as a class 
       The self variable 
       Another function class example 
       Alternative function class implementations 
       Making classes without the class construct 
       Closures 
 More examples on classes 
       Bank accounts 
       Phone book 
       A circle 
 Special methods 
       The call special method 
       Example: Automagic differentiation 
       Example: Automagic integration 
       Turning an instance into a string 
       Example: Phone book with special methods 
       Adding objects 
       Example: Class for polynomials 
       Arithmetic operations and other special methods 
       Special methods for string conversion 
 Example: Class for vectors in the plane 
       Some mathematical operations on vectors 
       Implementation 
       Usage 
 Example: Class for complex numbers 
       Implementation 
       Illegal operations 
       Mixing complex and real numbers 
       Dynamic, static, strong, weak, and duck typing 
       Special methods for "right" operands 
       Inspecting instances 
 Static methods and attributes 
 Summary 
       Chapter topics 
       Example: interval arithmetic 
 Exercises 
       Exercise 1: Make a function class 
       Exercise 2: Add a data attribute to a class 
       Exercise 3: Add functionality to a class 
       Exercise 4: Make classes for a rectangle and a triangle 
       Exercise 5: Make a class for quadratic functions 
       Exercise 6: Make a class for straight lines 
       Exercise 7: Flexible handling of function arguments 
       Exercise 8: Wrap functions in a class 
       Exercise 9: Flexible handling of function arguments 
       Exercise 10: Deduce a class implementation 
       Exercise 11: Implement special methods in a class 
       Exercise 12: Make a class for summation of series 
       Exercise 13: Apply a numerical differentiation class 
       Exercise 14: Implement an addition operator 
       Exercise 15: Implement in-place += and -= operators 
       Exercise 16: Implement a class for numerical differentiation 
       Exercise 17: Examine a program 
       Exercise 18: Modify a class for numerical differentiation 
       Exercise 19: Make a class for the Heaviside function 
       Exercise 20: Make a class for the indicator function 
       Exercise 21: Make a class for piecewise constant functions 
       Exercise 22: Speed up repeated integral calculations 
       Exercise 23: Apply a class for polynomials 
       Exercise 24: Find a bug in a class for polynomials 
       Exercise 25: Implement subtraction of polynomials 
       Exercise 26: Test the functionality of pretty print of polynomials 
       Exercise 27: Vectorize a class for polynomials 
       Exercise 28: Use a dict to hold polynomial coefficients 
       Exercise 29: Extend class Vec2D to work with lists/tuples 
       Exercise 30: Extend class Vec2D to 3D vectors 
       Exercise 31: Use NumPy arrays in class Vec2D 
       Exercise 32: Impreciseness of interval arithmetics 
       Exercise 33: Make classes for students and courses 
       Exercise 34: Find local and global extrema of a function 
       Exercise 35: Find the optimal production for a company 
 References 
A class packs a set of data (variables) together with a set of functions operating on the data. The goal is to achieve more modular code by grouping data and functions into manageable (often small) units. Most of the mathematical computations in this document can easily be coded without using classes, but in many problems, classes enable either more elegant solutions or code that is easier to extend at a later stage. In the non-mathematical world, where there are no mathematical concepts and associated algorithms to help structure the problem solving, software development can be very challenging. Classes may then improve the understanding of the problem and contribute to simplify the modeling of data and actions in programs. As a consequence, almost all large software systems being developed in the world today are heavily based on classes.
Programming with classes is offered by most modern programming languages, also Python. In fact, Python employs classes to a very large extent, but one can use the language for lots of purposes without knowing what a class is. However, one will frequently encounter the class concept when searching books or the World Wide Web for Python programming information. And more important, classes often provide better solutions to programming problems. This document therefore gives an introduction to the class concept with emphasis on applications to numerical computing. More advanced use of classes, including inheritance and object orientation, is treated in the document Object-oriented programming [1].
The folder src/class contains all the program examples from the present document.