python - 对 def __init__ 中的 __init__ 方法感到困惑

标签 python python-3.x oop tkinter

在下面的代码中:

import tkinter as tk

    class CardShuffling(tk.Tk):
        background_colour = '#D3D3D3'
        deck_size = 52

        def __init__(self):
            tk.Tk.__init__(self) # What does this do?

我对最后一行的目的感到困惑.. CardShuffling 的实例继承自 tk.Tk,最后一行不只是重复 已经处理的内容CardShuffling(tk.Tk) ??

最佳答案

CardShuffling(tk.Tk) 仅使类 CardShuffling 成为 tk.Tk 的子类。你的新类继承了这个类的所有方法。

但是如果您创建一个新对象,您仍然必须调用该基类的构造函数(以新对象作为参数)。想象在父类的构造函数中有一行self.a = 0。当您初始化一个新实例时,您的子类必须运行这一行; CardShuffling(tk.Tk) 不能为你做那个;你需要运行父类的__init__

在 python 3 中通常的做法是

def __init__(self):
    super().__init__()

在这种情况下与

相同
def __init__(self):
    tk.Tk.__init__(self)

也许这个article on inheritance有帮助,甚至还有一个 book chapter免费提供。

关于python - 对 def __init__ 中的 __init__ 方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777323/

相关文章:

java - java中的 vector 只包含对象?

oop - 在 __indexed 时使表表现得像值的优雅方式?

python - Pandas 根据条件获取行 ID

python - Colorbar 二维直方图 Python

python - print( )'s ` flush` 有什么作用?

python - 如何与普通用户一起使用 root 创建的套接字

asp.net - 太多的 Try Catch block 会导致性能下降?任何替代解决方案?

python - 更好的方法去堆叠 Pandas 行?

python - 在 Pandas 中使用 SUMIF 函数

python-3.x - 使用 Asyncio 的非阻塞 Websocket 接收