Python:如何修复代码,以便append将参数添加到列表中?
我对python非常陌生,我一直在尝试使用tkinter button命令来运行函数,它可以工作,但是append()没有执行,这意味着它没有附加到列表中 列表和包含append的函数在类之外,然后通过使用tkinter按钮命令在类内进行分类 我尝试将函数放入类中,它可以工作,但追加不会再次添加到列表中 这是我编写的代码,有点类似于真实代码Python:如何修复代码,以便append将参数添加到列表中?,python,python-3.x,list,append,Python,Python 3.x,List,Append,我对python非常陌生,我一直在尝试使用tkinter button命令来运行函数,它可以工作,但是append()没有执行,这意味着它没有附加到列表中 列表和包含append的函数在类之外,然后通过使用tkinter按钮命令在类内进行分类 我尝试将函数放入类中,它可以工作,但追加不会再次添加到列表中 这是我编写的代码,有点类似于真实代码 价格=[] f=真 类firstclass(): 定义初始化(自): 当f==True时: my_函数() f=假 def my_函数(): 价格。附加(7
价格=[]
f=真
类firstclass():
定义初始化(自):
当f==True时:
my_函数()
f=假
def my_函数():
价格。附加(70)
类secondclass():
定义初始化(自):
通过
打印(金额(价格))
真正的代码示例在这个链接中,请考虑这一点
我希望它会打印附加值70,但它仍然打印了0,这是您需要处理的一些问题。首先在类外部赋值
f=True
不会改变类内部的值,因此如果实例化该类,它只会抛出一个UnboundLocalError
来抱怨f没有初始化。您可以通过使用
fc = firstclass()
如果没有实例化,您就不希望它为您提供所需的价值。它打印零是因为函数secondclass有一个方法中不包含的print语句,因此它打印类声明的值sum(prices)
。该值来自原始的价格申报值,即[]
。至少这是你在问题中表现出来的方式。我不确定您是否要缩进print语句,这意味着它是secondclass的一部分。然而,如果您没有缩进,您将得到与您没有实例化firstclass相同的结果
要更正此问题,请参阅下文。此代码将按预期输出70
prices = []
class firstclass():
def __init__(self):
my_function()
def my_function():
prices.append(70)
class secondclass():
def __init__(self):
pass
print('before instantiation', sum(prices))
fc = firstclass()
print('after instantiation', sum(prices))
fc现在是一个类型为
first class
的对象,\uuuu init\uuuu
方法调用了my\u函数
将值70附加到prices
有两个原因
firstclass
来实际初始化
构造器False
赋值给变量f
不属于该类的范围。如果你仍然分配
它,它被认为是本地的。此时此刻,翻译
检测到您分配了它,而while循环没有任何本地
f
的引用,因为您没有在构造函数下定义它。
有关更多详细信息,请参阅答案prices = []
class firstclass():
f = True
def __init__(self):
while self.f:
my_function()
self.f = False
def my_function():
prices.append(70)
class secondclass():
def __init__(self):
pass
firstclass()
print(sum(prices))
我在我的真实代码中使用tkinter,我想使用
tk.Label
打印总和(价格),并将其放在class secondclass()
的def\uuu init\uuuuuu(self,parent,controller)
中。有没有办法让它位于第二类的def\uuuu init\uuuu(self、parent、controller)
中?嗨!实际上,我在我的真实代码中使用了tkinter,while语句只是替换了tk.Button(self,command=my_函数)
,而打印是替换tk.Label(self,text=sum(prices))
。按钮在第一类中,而标签在第二类中。有没有办法使价格在第二类的\uuuuu init\uuuu
范围内?或者,如果有任何其他方法可以产生与我预期相同的结果,并在tkinter框架内显示,我也希望知道如何做到这一点。:)很抱歉,我现在没有那么熟悉tkinter,但是是的,你可以在第二个类的\uuu init\uuuu
方法中调用firstclass()
和print(sum(prices)
。然后你可以调用secondclass()
全局,您将得到相同的结果。我刚刚尝试过这样做,但它向我发送了错误类型error:\uuu init\uuuuuuuuuu()缺少2个必需的位置参数:'parent'和'controller',我想这是因为第一类()中的\uuuu init\uuuuuuuuuuuuuuuuu>在实际代码中有'def'(self,parent,controller):`你能建议我可以做什么,这样我就不需要放置位置参数了吗?当我全局调用secondclass()
时也会发生同样的情况,因为它同样有这3个位置参数