我正在尝试通过调用其类上的方法来更改 python 变量。我的实际代码比下面的要复杂得多,但下面演示了这个问题。我知道 self 是指相关类的实例,所以我想简单地使用 self.val = 5 或任何可行的方法。但事实并非如此。
我确定我错过了一些非常明显的东西。我刚刚开始使用 Python 上课,这一切看起来都相当简单,而且我记得很多年前的 OOP,但是经过几个小时尝试不同的事情并在谷歌上搜索各种短语后,我仍然卡住了。我正在使用 Python 2.7。
from Tkinter import *
class mylistbox(Listbox):
def __init__(self, *args, **kwargs):
Listbox.__init__(self, *args, **kwargs)
self.val = 2 # setting val in this instance to 2
def change(self, newval): #in my real code this method does a lot more
self.val = newval # this doesn't change val in this instance!
print "self.val is now " + str(self.val)
def callback(x):
print x
top = Tk()
listbox = mylistbox(top)
listbox.pack()
b = Button(top, text="change", command = lambda zzz=7: listbox.change(zzz))
b.pack()
b = Button(top, text="answer", command = lambda myval=listbox.val: callback(myval))
b.pack()
top.mainloop()
如果我点击回答、更改、回答,那么我得到的输出是......
- 2
- self.val 现在是 7
- 2