【问题标题】:What does Frame.__init__ do?Frame.__init__ 做什么?
【发布时间】:2013-09-20 19:28:21
【问题描述】:

在下面的代码第 5 行中,Frame.__init__ 做了什么?有人可以解释它背后的概念吗?非常感谢!

from Tkinter import *
class AppUI(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master, relief=SUNKEN, bd=2)
        [...]

编辑: Full Code with correct indention here

【问题讨论】:

  • 它正在调用其基类Frame__init__方法。

标签: python tkinter frame


【解决方案1】:

AppUI 类基于Tkinter 中的Frame 类。这意味着AppUI 类是Frame类型,但有一些行为略有不同或自定义。这意味着AppUI 类的方法可能需要(实际上,通常需要)从Frame 类调用代码。也就是说,AppUI 想做与Frame 类相同的事情,还有其他事情。这就是这里发生的事情:当您实例化一个AppUI 时,您希望它首先被初始化为Frame,然后执行AppUI 特定的初始化。

这里AppUI 显式调用其父类的__init__() 方法。

您也可以使用super() 函数来执行此操作——通常您会这样做;它基本上在多继承场景中是必需的。但是因为 Tkinter 使用了"old-style classes",所以你必须在这里使用旧方法。

【讨论】:

  • 我是否理解正确:AppUI 继承自 Frame,所以:'AppUI(Frame)' 首先将我的 AppUI 实例初始化为 Frame 实例,但不运行 Frame 的 '__init__()' 方法?我认为这是 '__init__()' 方法的想法,它在类被实例化后立即运行......
  • 不,AppUI(Frame) 确定 AppUI 基于 Frame。它不做任何初始化。这就是 __init__() 方法的用途,是的。
  • 那么“基于”是什么意思呢?也许那个 AppUI 从 Frame 获得了所有的方法?非常感谢您的回答!!
  • 表示如果没有在AppUI上定义属性或方法,则使用Frame对应的属性或方法。例如,如果您在AppUI 中没有t write an __init__()`,那么将自动使用来自Frame__init__()
  • 使用super 的建议通常是一个好主意……但是 Tkinter 使用旧式类(它可能会使用一些新式类和 2.6+ 中的一些旧式,我可以'不记得了……但这并没有真正的帮助,因为它绝对没有记录哪个是哪个),所以你坚持使用旧样式。当然3.x的tkinter没有这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2016-05-28
  • 1970-01-01
  • 2010-10-12
  • 2019-04-21
相关资源
最近更新 更多