为什么要为这个 class 初始化程序使用默认值 None?

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

我测试了这个 answer 中的代码,它工作得很好。

代码会创建一个 Application class,如下所示:

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)

并创建一个实例:

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

但是,其中有一点我不明白:为什么构造函数将 None 对象作为参数 def __init__(self, master=None): 但他调用 Application() class 他给它传递了一个 root=Tk() 实例 ?

class复制了Frame构造函数;它 too 接受一个可选的 master 参数。您 没有 传递一个主窗口小部件,即使这里的代码确实传递了一个。参见 *frame section of An introduction to Tkinter:

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

tkinter documentation examples 包含相同的模式:

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)

这样做可以让你的代码更加灵活;您现在可以创建一个 Application 没有 master 的实例,并将其传递给稍后需要绑定任何 Tk 对象的代码。