2016-04-01 3 views
0

Also mit OOP Ich versuche, einen Kalender in Python zu machen, hier habe ich einen Monat Klasse gesetzt:Erstellen von Instanzen einer Klasse in einer Schleife in Python?

week_days=['Sat', 'Sun', 'Mon', 'Teu', 'Wed', 'Thu', 'Fri'] 

class Month(object): 
    #class variable. 
    days=[] 

    def __init__(self, label, numdays, starts_with): 
     self.label=label 
     count=week_days.index(starts_with) 
     for i in range(1, numdays+1): 
      self.days.append([i, week_days[count]]) 
      count+=1 
      if count>6: 
       count=0     #loop around week_days 
     self.NMFD = week_days[count]  #next month 1st day 

Es funktioniert ganz gut, und hier ist das Jahr Klasse:

months_list=[('Jan', 31), ('Feb', 29), ('Mar', 31), ('Apr', 30)...] 

class Year(object): 
    #class variable. 
    months=[] 

    def __init__(self): 
     FD= 'Sat' 
     for item in months_list: 
      m=Month(item[0], item[1], FD) 
      self.months.append(m) 
      FD = m.NMFD 

      #Debug... 
      print m.label 
      print m.days 
      print 'Next month first day =' + FD 
      print '\n' 


if __name__ == '__main__':    
    year = Year() 

das Problem ist, dass die Monate immer am Tag beginnen ‚Sat‘, die ich vor dem for-Schleife versehen, obwohl die Variable FD (First Day) in jeder Iteration m.NMFD neu zugewiesen wird, ist hier die Ausgabe:

Jan 
[[1, 'Sat'], [2, 'Sun'], [3, 'Mon'], [4, 'Teu']...[30, 'Sun'], [31, 'Mon']] 
Next month first day =Teu 

Feb 
[[1, 'Sat'], [2, 'Sun'], [3, 'Mon'], [4, 'Teu']...[28, 'Mon'], [29, 'Teu']] 
Next month first day =Wed 

Mar 
[[1, 'Sat'], [2, 'Sun'], [3, 'Mon'], [4, 'Teu']...[30, 'Thu'], [31, 'Fri']] 
Next month first day =Sat 

Apr 
[[1, 'Sat'], [2, 'Sun'], [3, 'Mon'], [4, 'Teu']...[28, 'Fri'], [29, 'Sat'], [30, 'Sun']] 
Next month first day =Mon 

May 
[[1, 'Sat'], [2, 'Sun'], [3, 'Mon'], [4, 'Teu']...]  #.....etc 

Ich habe versucht, Wörterbücher oder Tupel anstelle von verschachtelten Listen zu verwenden, aber es hat nicht funktioniert, und ich fand keine befriedigenden Antworten hier auf Stack Overflow ... jede Hilfe wäre sehr geschätzt, danke im Voraus.

+3

Warum definieren Sie "Tage" und "Monate" als Klassenvariablen anstelle von Instanzvariablen? – user2357112

+0

Alle Jahre haben Monate und alle Monate haben Tage, also ist es besser, sie als Klassenvariablen zu deklarieren, ich denke nicht, dass das einen Unterschied machen würde. –

+0

Es ist in der Tat die Ursache für Ihr Problem. – user2357112

Antwort

0

Versuchen Sie folgendes:

class Month(object): 

    def __init__(self, label, numdays, starts_with): 
     self.label=label 
     self.days = [] 
     count=week_days.index(starts_with) 
     for i in range(1, numdays+1): 
      self.days.append([i, week_days[count]]) 
      count+=1 
      if count>6: 
       count=0     #loop around week_days 
     self.NMFD = week_days[count] 

Die Klassenvariable heißt jedes Mal wenn Sie die Klasse konstruieren.

+0

ya es hat geklappt! Was komisch ist ist, dass ich den Fehler mit dem Kommentar ohne zu wissen hervorgehoben habe;) Danke! –

+0

Ich habe den Kommentar nicht gelesen lol, ich bin nur froh, dass Sie die Lösung mit wenig Hilfe gefunden haben. – SDBot