子类init方法

问题描述 投票:0回答:1

我有一个关于 Python 中子类的

init
方法的问题。

enter image description here

在上图中,子类 Developer 是从父类 Employee 定义的。在 Developer 中,使用

__init__
(即父类的
super().__init__
方法)定义
__init__
方法,并添加父类中不存在的额外属性
prog_lang
。这我明白了。然而,在下面的例子中:

enter image description here

子类 App 是从 tkinter 模块的父类 tk.Tk 定义的。这里,使用相同的

super().__init__
方法,在实例化时将父类的所有属性赋予子类的实例。然而,然后,不要像前面的示例那样用等号编写“额外”属性,它看起来像这样:

self.title = 'Classed based app'
self.geometry = '600x600'
...

我们有:

self.title('Classed based app')
self.geometry('600x600')
...

我的问题是为了测试我的理解:这是因为父类

tk.Tk
的构造方法已经有一个
title
geometry
属性,如果在生成类的实例时未输入任何值,则这些属性将被设置为一些默认值?此外,父类
tk.Tk
还有一个方法
title
,可以为实例的
title
属性设置新值。这张草图中的一些东西:

class Tk:
def __init__(self, title = default,...)
     self.title = title
     ....


def title(self, new_title):
    self.title = new_title

因此,在子类App的构造方法中,使用等号设置属性(

self.title = 'Classes based app'
)和使用方法(
self.title('Classes based app')
)是等价的。

我尝试在网上寻找 tk.Tk() 类“手册”,但没有找到。

我留下了截图来源的YouTube视频的链接:

  1. 图片1
  2. 图片2
python class constructor subclass init
1个回答
0
投票

tkinter 不是用 python 编写的,您必须坚持使用绑定所做的任何操作来将其功能公开给 python。在这种情况下,

title
等是 setter 方法,而不是普通属性。标题实际上保存在底层 tcl 对象中。您可以添加
print(self.title)
,您将看到它是一个绑定方法。

© www.soinside.com 2019 - 2024. All rights reserved.