Attributes specified in the class declaration are called class attributes. Consider the following example:
class Newton: tol = 1e-8 # this is a class attribute def __init__(self,f): self.f = f # this is not a class attribute ...
Class attributes are useful for simulating default values and can be used if values have to be reset:
N1 = Newton(f) N2 = Newton(g)
Both instances have an attribute, tol, with the value initialized in the class definition:
N1.tol # 1e-8 N2.tol # 1e-8
Altering the class attribute automatically affects all the corresponding attributes of all instances:
Newton.tol = 1e-10 N1.tol # 1e-10 N2.tol # 1e-10
Altering tol for one instance does not affect the other instance:
N2.tol = 1.e-4 N1.tol # still 1.e-10
But now, N2.tol is detached from the class attribute. Changing Newton.tol no longer has any effect on N2.tol:
Newton.tol = 1e-5
# now all instances of the Newton classes have tol=1e-5 N1.tol # 1.e-5 N2.tol # 1.e-4
# N2.tol...