【发布时间】:2012-04-17 19:40:57
【问题描述】:
我在运行这段代码时遇到问题。该类是具有 IdCounter 的 Student,这似乎是问题所在。 (第 8 行)
class Student:
idCounter = 0
def __init__(self):
self.gpa = 0
self.record = {}
# Each time I create a new student, the idCounter increment
idCounter += 1
self.name = 'Student {0}'.format(Student.idCounter)
classRoster = [] # List of students
for number in range(25):
newStudent = Student()
classRoster.append(newStudent)
print(newStudent.name)
我试图在我的Student 班级中使用这个 idCounter,这样我就可以将它作为学生姓名的一部分(这实际上是一个 ID#,例如 Student 12345。但我遇到了错误。
Traceback (most recent call last):
File "/Users/yanwchan/Documents/test.py", line 13, in <module>
newStudent = Student()
File "/Users/yanwchan/Documents/test.py", line 8, in __init__
idCounter += 1
UnboundLocalError: local variable 'idCounter' referenced before assignment
我尝试将 idCounter += 1 放在 before、after、all 组合中,但我仍然收到 referenced before assignment 错误,你能解释一下我做错了什么吗?
【问题讨论】:
-
你看过紧随其后的那一行了吗?
-
为什么我没想到...(原来我的代码写了
Student.idCounter = 0) -
除了特定的错误之外,增量在 Python 中不是原子的,因此天真的计数器可能会导致竞争条件。更好的方法是使用
itertools.count。 -
使用您的示例here对您的问题发布了后续问题