在以下代码中:
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)
已经处理过的事情?
答案 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。