繁体   English   中英

为什么在Python中赋值之前会收到UnboundLocalError消息,该消息指出局部变量“参与者”被引用?

[英]Why am I getting the UnboundLocalError that says local variable 'participants' referenced before assignment in Python?

我有以下几行代码,但是不断出现此错误:

错误

UnboundLocalError:分配前引用了局部变量“参与者”

有人知道我在做什么错,这是我的代码:

码:

class Competition(object):
    def __init__(self, place, date, start_place, start_time):
        self.place = place
        self.date = date
        self.start_place = start_place
        self.start_time = start_time
        participants = []

    def registration(self, name):
        self.name = name
        participants += self.name
        return deelnemers

participant1 = Competition('Italy', '2018-05-24', 'Rome', '21:55')
participant1.registration('Tom Dumoulin')

在您的__init__registration方法中, participants都是每个方法局部的变量。 这意味着在方法运行完后,这些变量将消失。

如果要将participants存储为Competition类的一部分,则可以使用self将其附加到实例化对象上

class Competition(object):
    def __init__(self, place, date, start_place, start_time):
        self.place = place
        self.date = date
        self.start_place = start_place
        self.start_time = start_time
        self.participants = []

    def registration(self, name):
        self.name = name
        self.participants.append(self.name)

您在init中定义了没有自身前缀的参与者,因此它是init函数外部不存在的函数局部变量。

然后,您尝试在注册函数中引用它,但它不是类变量(没有自身前缀),因此在初始化完成后不再设置它,因此您尝试向不存在的变量中添加内容。

因此,错误。

如果要在类的所有实例之间共享变量,可以在类内部但在所有类函数外部定义该变量,然后由Competition.participant从函数内部引用该变量。

如果要将变量绑定到类的实例,则在所有情况下都应使用self。 前缀-在设置变量和在任何地方引用它时都可以。

__init__中的participants = []没什么用,因为列表未绑定到正在初始化的实例。 你可能想要
self.participants = []

registration时,尝试使用+=扩展该列表时必须参考该列表,即self.participants += ...

需要注意的是,如果这会给你提供一个错误name ,如果没有可迭代的或意外的结果name是一个字符串(每个字母都会被单独附加到列表)。 您可能希望在此使用列表的append方法,而不要使用extend (在使用+=时调用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM