我对python很陌生,我一直在尝试使用tkinter button命令运行函数的代码,它可以工作,但是append()未执行,这意味着它不会追加到列表中
列表和包含追加的函数在类之外,然后通过使用tkinter按钮命令在类内分类
我尝试将函数放在类中,它可以工作,但是追加没有再次添加到列表中。
这是我编写的与真实代码有些相似的代码
prices = []
f = True
class firstclass():
def __init__(self):
while f == True:
my_function()
f = False
def my_function():
prices.append(70)
class secondclass():
def __init__(self):
pass
print(sum(prices))
真实代码示例在此链接中,请也考虑到这一点 python: Appending a value to a list outside the class, function with append also outside the class, but function is called within a class
我希望它会打印出附加值70,但它仍会打印0
答案 0 :(得分:1)
您需要处理的一些问题。首先在类外部分配f=True
不会更改内部的值,因此,如果实例化该类,则只会抛出UnboundLocalError
,抱怨f尚未初始化。您可以通过使用
fc = firstclass()
没有实例化,就没有希望它赋予您想要的价值。由于函数secondclass,它的输出为零,该函数具有一个方法中未包含的print语句,因此它将打印声明了该类的值sum(prices)
。该值来自价格的原始声明价值[]
。至少那是您在问题中所显示的方式。我不确定您是否要缩进打印语句,这意味着它是第二类的一部分。但是,如果不缩进,则会得到与未实例化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现在是firstclass
类型的对象,并且__init__
方法调用了my_function
,将值70附加到prices
。
答案 1 :(得分:1)
发生这种情况有两个原因。
firstclass
来实际初始化
构造函数。False
分配给变量f
这不属于该类的范围。如果您仍然分配
它,它被认为是本地的。现在,口译员
检测到您分配了它,而while循环没有任何本地
f
的引用,因为您没有在构造函数下定义它。
有关更多详细信息,请参见this答案。这是完整的代码:
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))