Python 自我对象和非自我对象之间有什么区别,特别是在Tkinter类中?
我有一个简单的self.btn1代码Python 自我对象和非自我对象之间有什么区别,特别是在Tkinter类中?,python,class,object,tkinter,self,Python,Class,Object,Tkinter,Self,我有一个简单的self.btn1代码 from tkinter import Tk, ttk, messagebox import tkinter as tk class Main(tk.Frame): def __init__(self, root): super().__init__(root) self.btn1 = ttk.Button(self, text="test") self.btn1.pack() if __name_
from tkinter import Tk, ttk, messagebox
import tkinter as tk
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.btn1 = ttk.Button(self, text="test")
self.btn1.pack()
if __name__ == "__main__":
root = tk.Tk()
app = Main(root)
app.pack()
root.mainloop()
这个代码没有self按钮
from tkinter import Tk, ttk, messagebox
import tkinter as tk
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
btn1 = ttk.Button(self, text="test")
btn1.pack()
if __name__ == "__main__":
root = tk.Tk()
app = Main(root)
app.pack()
root.mainloop()
两者的工作原理相似,但有什么区别,我应该使用哪一个?唯一真正的区别在于检索对
按钮的引用有多容易,如果您需要的话。对于前者,它只是app.btn1
。对于后者,它是app.winfo_children()[0]
>>> app.winfo_children()[0] is app.btn1
True
不同之处在于,
btn1
是一个局部变量,仅在使用它的函数中可用self.btn1
是一个实例变量,在类中的每个函数中都可用。self
是调用方法的实例。对self
的赋值(不管第一个位置参数是什么,通常只称为self
)将创建实例属性。