2016-04-01 16 views
0

だから私はOOPを使用してPythonでカレンダーを作るしようとしている、ここで私は月のクラスを設定しました: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 

それがうまく動作し、ここでは年のクラスです:

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() 

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 
:問題は、変数FD(初日)はm.NMFDに各反復で再割り当てされているが、ここでは出力ですが、数ヶ月は、いつも私がforループの前に提供日の土」で始めるということです

ネストされたリストの代わりに辞書やタプルを使用しようとしましたが、うまくいかず、Stack Overflowで満足のいく回答が見つかりませんでした。

+3

なぜインスタンス変数の代わりに 'days'と' months'をクラス変数として定義していますか? – user2357112

+0

すべての年に月があり、すべての月には日数があるので、クラス変数として宣言したほうが良いですが、違いはありません。 –

+0

これは実際問題の根本原因です。 – user2357112

答えて

0

これを試してみてください:

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] 

クラス変数は、クラスを構築するたびに呼び出されます。

+0

それは働いた!面白いのは、私が知らないうちにそのコメントでバグを強調したことです;)ありがとう! –

+0

私はコメントLOLを読んでいませんでしたが、ちょっとした助けを借りて解決策を見つけられてうれしいです。 – SDBot

関連する問題