Q:

Why use a default value of None for this class initialiser?

I tested the code in this answer and it works just fine.
The code creates a Application class like this:
class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)

and creates an instance with:
root = Tk()
app = Application(master=root)

However, there is one  thing I do not understand in it: why the constructor takes as an argument a None object def __init__(self, master=None): but he calls the Application()  class he passes it a root=Tk() instance ?

A:

The class copies the Frame constructor; it too takes an optional master argument. You don't have to pass in a master widget, even though here the code does pass one in. See the *frame section of An introduction to Tkinter:

Frame(master=None, **options) (class)
  A widget container.

The tkinter documentation examples include the same pattern:

from Tkinter import *

class Application(Frame):
    # ...

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

root = Tk()
app = Application(master=root)

Doing so makes your code more flexible; you can now create an Application instance without a master, and pass it to code that takes any Tk object to bind at a later time.

