2016-04-01 63 views
0

所以我试图让使用OOP Python中的日历,在这里我给自己定一个Month类:在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() 

问题是,几个月总是在开始一天的星期六“我之前在for循环提供,虽然可变FD(第一天)在每个迭代m.NMFD被重新分配,这里的输出:

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 

我试过使用字典或元组而不是嵌套列表,但它没有工作,我没有找到满意的答案在这里堆栈溢出...任何帮助将不胜感激,在此先感谢。

+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

我没有阅读评论大声笑,我只是很高兴你发现解决方案没有什么帮助。 – SDBot

相关问题