tkinter中两种Frame子类初始化方式是否存在差异?我的理解正确吗?
两个Tkinter Frame子类实现的差异分析
你的理解基本正确,这两种写法在当前单继承场景下功能完全等价,本质是调用父类构造方法的不同方式,属于风格选择,但super()写法在扩展性上更有优势。
- 功能一致:在仅继承
Frame的情况下,super().__init__(window)和Frame.__init__(self, window)都会准确调用父类Frame的构造方法,最终初始化出的MyFrame1和MyFrame2实例没有任何功能差异。 super()的灵活性:如果后续需要给子类添加多继承(比如同时继承Frame和另一个自定义类),super()会自动遵循Python的MRO(方法解析顺序)来调用对应父类的构造方法,无需手动修改父类名称,代码维护性更强。- 显式调用的直白性:
Frame.__init__(self, window)是直接指定调用Frame的构造方法,写法直观,在单继承场景下可读性没问题,但多继承时需要手动逐个调用各父类构造方法,容易出错。
示例代码:
from tkinter import * class MyFrame1(Frame): def __init__(self, window): super().__init__(window) class MyFrame2(Frame): def __init__(self, window): Frame.__init__(self, window)
内容的提问来源于stack exchange,提问作者Ahad Dehghani
相关产品推荐
相关产品推荐

