gpt4 book ai didi

python - 有人可以解释一下这段代码的第二个版本是如何工作的吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:02 24 4
gpt4 key购买 nike

我是 Python 初学者,目前正在阅读《Python 初学者编程》一书的第 10/12 章。我理解Python中的OOP,但由于有一章(讨论了一些关于OOP的相关信息)是基于一个打“纸牌”的程序,我不得不跳过这一章的一部分(因为我不知道如何打纸牌)并且所以我错过了书中此时我应该了解的重要信息。我这么说的原因是因为我需要一个简单的答案来回答我的问题,因为复杂的答案可能对我来说太难以解释。

但无论如何,这是我的问题,我的书中有一段代码创建了一个简单的 GUI 程序(我完全理解),然后有一个我不理解的面向对象版本的程序(主要部分在“##”中突出显示)。它包含一个叫做“父类(super class)构造函数”的东西,这让我完全困惑(我尝试对它进行一些研究,但它对我来说没有意义)。如果有人可以帮助向我解释代码的第二个版本是如何工作的(或提供有用的资源),那么我将非常感激:

代码的第一个版本:

from tkinter import *

# create a root window
root = Tk()
root.title("Lazy Buttons")
root.geometry("200x85")

app = Frame(root)
app.grid()

bttn1 = Button(app, text = "This is a button")
bttn1.grid()

root.mainloop()

第二个版本:

from tkinter import *

class Application(Frame):

def __init__(self, master): # Why is 'master' called?
super(Application, self).__init__(master) # ?
self.grid()
self.create_widgets()

def create_widgets(self):
self.bttn1 = Button(self, text = "This is a button")
self.bttn1.grid()

root = Tk()
root.title("Lazy Buttons 2")
root.geometry("200x85")
app = Application(root)
root.mainloop()

最佳答案

不要因为不了解问题领域而跳过教程的某些部分 - 您不需要知道如何玩纸牌来理解纸牌游戏代码与程序的功能之间的关系。针对您的实际问题:

class Application(**Frame**):

这将创建一个类 Application继承自类 Frame 。如果您不了解继承,您正在学习的教程应该会对其进行解释,或者您可以尝试此 introduction to classes and inheritance我刚刚用谷歌搜索到的。

**def __init__(self, master):

这将创建一个名为 __init__ 的方法。这是 Python 中的一种特殊方法,其行为与其他语言中的构造函数类似 - 本质上,只要 Application创建后,Python会立即调用其__init__方法,然后将新对象返回给创建它的人。 master只是一个参数,与任何其他函数的任何其他参数相同。

super(Application, self).__init__(master)

这会调用父类(super class)的构造函数,让它初始化新对象。 super(Application, self)找出父类(super class)是什么(在本例中是 Frame ;在您最终会遇到的更复杂的情况下,这更难计算出来,而 super 的魔力变得很重要) .

self.create_widgets()**

这会调用方法 create_widgets ,您在下面定义。 .之前的对象作为第一个参数 self 传递到方法中- 因此,这会在调用您所在方法的同一对象上调用不同的方法。

app = Application(root)

这会创建一个 Application - 对象是通过调用类来创建的,就像 list() 一样创建一个列表。您传入的参数将被传递给 __init__作为第二个参数(Python 在幕后创建的新 Application 作为第一个参数 self 传递,如上所述)。 Python 创建一个新的Application ,称其 __init__为您,然后将新对象分配给名称“app”。

关于python - 有人可以解释一下这段代码的第二个版本是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12004503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com