Using a class instance together with parentheses or brackets, () or [], invokes a call to one of the special methods __call__ or __getitem__, giving the instance the behavior of a function or of an iterable; see also Table 8.1.
class Polynomial: ... def __call__(self, x): return self.eval(x)
Which now may be used as follows:
p = Polynomial(...) # Creating a polynomial object p(3.) # value of p at 3.
The special method __getitem__ makes sense if the class provides an iterator (it is recommended that you review Section 9.2.1: Generators before you consider the following example).
The recursion is called a three-term recursion. It plays an important role in applied mathematics, in particular in the construction of orthogonal polynomials. We can set up a three-term recursion as a class in the following way:
import itertools class Recursion3Term: def __init__(self, a0, a1, u0, u1): self.coeff = [a1, a0] ...