在下面的代码中:
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/