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.
Warum definieren Sie "Tage" und "Monate" als Klassenvariablen anstelle von Instanzvariablen? – user2357112
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. –
Es ist in der Tat die Ursache für Ihr Problem. – user2357112