Bound and unbound methods
We will now take a closer look at attributes that are methods. Let us consider an example:
class A: def func(self,arg): pass
A little inspection shows us how the nature of func
changes after creating an instance:
A.func # <unbound method A.func> instA = A() # we create an instance instA.func # <bound method A.func of ... >
Calling, for example, A.func(3)
would result in an error message such as this:
TypeError: func() missing 1 required positional argument: 'arg'
instA.func(3)
is executed as expected. Upon creation of an instance, the func
method is bound to the instance. The self
argument gets the instance assigned as its value. Binding a method to an instance makes the method usable as a function. Before that, it is of no use. Class methods, which we will consider later, are different in this aspect.