为什么要为这个 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 对象的代码。
我测试了这个 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 对象的代码。