对def __init__里面的__init__方法感到困惑

时间:2017-01-21 08:39:37

标签: 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)已经处理过的事情?

1 个答案:

答案 0 :(得分:6)

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