Python 我什么时候可以省略自我
我发现了这个简单tkinter类的示例。 该示例适用于以下两种情况: “frame”或“self.frame” 为什么我可以或会安全地省略“self”Python 我什么时候可以省略自我,python,class,tkinter,self,Python,Class,Tkinter,Self,我发现了这个简单tkinter类的示例。 该示例适用于以下两种情况: “frame”或“self.frame” 为什么我可以或会安全地省略“self” from Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.button = Button( frame, text=
from Tkinter import *
class App:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.button = Button(
frame, text="QUIT", fg="red", command=frame.quit
)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
print "hi there, everyone!"
root = Tk()
app = App(root)
root.mainloop()
root.destroy() # optional; see description below
在大多数情况下,除了
self之外,您可以省略self
。说“嗨”
。否则,say_hi
引用全局函数,而不是方法
def __init__(self, master):
frame = Frame(master)
frame.pack()
button = Button(frame, text="QUIT", fg="red", command=frame.quit)
button.pack(side=LEFT)
hi_there = Button(frame, text="Hello", command=self.say_hi)
hi_there.pack(side=LEFT)
self.frame
/frame
只要frame对象仅在方法中引用,就可以使用这两种方法。如果在另一种方法中使用,则应将其限定为self.frame
在大多数情况下,除了self之外,您可以省略self
。否则,say_hi
引用全局函数,而不是方法
def __init__(self, master):
frame = Frame(master)
frame.pack()
button = Button(frame, text="QUIT", fg="red", command=frame.quit)
button.pack(side=LEFT)
hi_there = Button(frame, text="Hello", command=self.say_hi)
hi_there.pack(side=LEFT)
self.frame
/frame
只要frame对象仅在方法中引用,就可以使用这两种方法。如果在另一种方法中使用,则应将其限定为self.frame
在大多数情况下,除了self之外,您可以省略self
。否则,say_hi
引用全局函数,而不是方法
def __init__(self, master):
frame = Frame(master)
frame.pack()
button = Button(frame, text="QUIT", fg="red", command=frame.quit)
button.pack(side=LEFT)
hi_there = Button(frame, text="Hello", command=self.say_hi)
hi_there.pack(side=LEFT)
self.frame
/frame
只要frame对象仅在方法中引用,就可以使用这两种方法。如果在另一种方法中使用,则应将其限定为self.frame
在大多数情况下,除了self之外,您可以省略self
。否则,say_hi
引用全局函数,而不是方法
def __init__(self, master):
frame = Frame(master)
frame.pack()
button = Button(frame, text="QUIT", fg="red", command=frame.quit)
button.pack(side=LEFT)
hi_there = Button(frame, text="Hello", command=self.say_hi)
hi_there.pack(side=LEFT)
self.frame
/frame
只要frame对象仅在方法中引用,就可以使用这两种方法。如果在另一种方法中使用,则应将其限定为self.frame
一般来说,使用像frame
这样的局部变量比使用像self.frame
这样的对象属性更有效。只有在创建对象的方法返回后需要能够引用该对象时,才应该使用对象属性
在Python中,存储在局部变量中的对象在函数或方法返回后会被垃圾收集,但这不是问题。帧对象本身将是持久的,因为它链接到传递给\uuu init\uuu()
的主对象。通常,使用像Frame
这样的局部变量比使用像self.Frame
这样的对象属性更有效。只有在创建对象的方法返回后需要能够引用该对象时,才应该使用对象属性
在Python中,存储在局部变量中的对象在函数或方法返回后会被垃圾收集,但这不是问题。帧对象本身将是持久的,因为它链接到传递给\uuu init\uuu()
的主对象。通常,使用像Frame
这样的局部变量比使用像self.Frame
这样的对象属性更有效。只有在创建对象的方法返回后需要能够引用该对象时,才应该使用对象属性
在Python中,存储在局部变量中的对象在函数或方法返回后会被垃圾收集,但这不是问题。帧对象本身将是持久的,因为它链接到传递给\uuu init\uuu()
的主对象。通常,使用像Frame
这样的局部变量比使用像self.Frame
这样的对象属性更有效。只有在创建对象的方法返回后需要能够引用该对象时,才应该使用对象属性
在Python中,存储在局部变量中的对象在函数或方法返回后会被垃圾收集,但这不是问题。帧对象本身将是持久的,因为它链接到传递给\uuuu init\uuuu()
的主对象,您可以在帧
之前忽略self
,因为您将引用传递到按钮
,该按钮存储为self.Button
(大概是按钮
为您保存对框架的引用)
这确保了当您超出\uuuuu init\uuuuu
的范围时,不会对您的帧进行垃圾收集,因为只有未在任何地方引用的对象才会被销毁
在本例中,您在self.button
之外没有使用frame
,因此在self.frame
中存储对它的额外引用没有意义
如其他答案中所述,如果您想稍后直接引用与对象实例相关的内容,您只需要self
。您可以在frame
之前省略self
,因为您将引用传递到按钮
,该按钮存储为self.Button
(大概是按钮
为您保存对框架的引用)
这确保了当您超出\uuuuu init\uuuuu
的范围时,不会对您的帧进行垃圾收集,因为只有未在任何地方引用的对象才会被销毁
在本例中,您在self.button
之外没有使用frame
,因此在self.frame
中存储对它的额外引用没有意义
如其他答案中所述,如果您想稍后直接引用与对象实例相关的内容,您只需要self
。您可以在frame
之前省略self
,因为您将引用传递到按钮
,该按钮存储为self.Button
(大概是按钮
为您保存对框架的引用)
这确保了当您超出\uuuuu init\uuuuu
的范围时,不会对您的帧进行垃圾收集,因为只有未在任何地方引用的对象才会被销毁
在本例中,frame
在self.button
之外没有任何用处,因此没有必要存储额外的