2012-04-04 7 views
10

के लिए काउंटर वैरिएबल मुझे कोड के इस भाग को चलाने में समस्या आ रही है। कक्षा वह छात्र है जिसमें एक आईडीकॉन्टर है, और यह वह जगह है जहां समस्या प्रतीत होती है। (लाइन 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 के लिए कोशिश कर रहा हूँ, इसलिए मैं छात्र का नाम (जो वास्तव में एक आईडी # है, उदाहरण के लिए 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 से पहले में, के बाद, सभी संयोजन, लेकिन मैं अभी भी referenced before assignment त्रुटि हो रही है, तुम मेरे लिए मैं गलत क्या कर रहा हूँ की व्याख्या कर सकते हैं?

+1

क्या आपने तुरंत लाइन पर ध्यान दिया है? –

+0

मैंने इसके बारे में क्यों नहीं सोचा है ... (मूल रूप से मेरे कोड ने 'Student.idCounter = 0' लिखा) – George

+1

विशेष त्रुटि के अलावा, पाइथन में वृद्धि परमाणु नहीं है, इसलिए मूर्ख काउंटर दौड़ की स्थिति का कारण बन सकता है। 'Itertools.count' का उपयोग करने का बेहतर तरीका होगा। – bereal

उत्तर

17
class Student: 
    # A student ID counter 
    idCounter = 0 
    def __init__(self): 
     self.gpa = 0 
     self.record = {} 
     # Each time I create a new student, the idCounter increment 
     Student.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) 

Ignacio, Vazquez-Abrams द्वारा बताए गए बिंदु के लिए धन्यवाद, इसे समझ लिया ...

+0

इसके अलावा , ध्यान दें कि आपकी पहली टिप्पणी पूरी तरह से गलत है। –

+0

हाँ, असल में यह सिर्फ एक काउंटर है और कुछ भी नहीं। (वास्तव में नहीं जानते कि इस पर टिप्पणी करने के लिए, शायद सभी को एक साथ टिप्पणी को हटा देना चाहिए)। Ignacio Vazquez-Abrams बहुत बहुत धन्यवाद। – George