在以下代码中:

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

10-07 19:29
查看更多