Python 2.7 でクラス プロパティに問題があり、解決策を見つけることができましたが、理解できません。
次の考案されたコードでは、各歌が、言及された曜日の歌詞を含む独自の辞書を持つことを期待しています。
class Song:
name = ""
artist = ""
# If I comment this line and uncomment the one in the constructor, it works right
week = {}
def set_monday( self, lyric ):
self.week[ "Monday" ] = lyric;
.
. # silly, I know
.
def set_friday( self, lyric ):
self.week[ "Friday" ] = lyric;
def show_week( self ):
print self.week
def __init__(self, name, artist):
self.name = name
self.artist = artist
# Uncomment the line below to fix this
# self.week = {}
def main():
songs = {}
friday_im_in_love = Song( "Friday I'm in Love", "the Cure" )
friday_im_in_love.set_monday( "Monday you can fall apart" )
friday_im_in_love.set_tuesday( "Tuesday can break my heart" )
friday_im_in_love.set_wednesday( "Wednesday can break my heart" )
friday_im_in_love.set_thursday( "Thursday doesn't even start" )
friday_im_in_love.set_friday( "Friday I'm in love" )
songs[ "Friday I'm in Love" ] = friday_im_in_love
manic_monday = Song( "Manic Monday", "the Bangles" )
manic_monday.set_monday( "Just another manic Monday" )
songs[ "Manic Monday" ] = manic_monday
for song in songs:
# This shows the correct name and artist
print songs[song].name + " by " + songs[song].artist
# The dictionary is incorrect, though.
songs[song].show_week()
if __name__ == '__main__':
main()
上記のコードを実行すると、出力は次のようになります。
Manic Monday by the Bangles
{'Friday': "Friday I'm in love", 'Tuesday': 'Tuesday can break my heart', 'Thursday': "Thursday doesn't even start", 'Wednesday': 'Wednesday can break my heart', 'Monday': 'Just another manic Monday'}
Friday I'm in Love by the Cure
{'Friday': "Friday I'm in love", 'Tuesday': 'Tuesday can break my heart', 'Thursday': "Thursday doesn't even start", 'Wednesday': 'Wednesday can break my heart', 'Monday': 'Just another manic Monday'}
どちらの辞書も、私が期待するようには見えません。コードに戻ると、week = {}
一番上にコメントself.week={}
を付けて、コンストラクターでコメントを外すと、辞書が期待どおりに表示されます。
Manic Monday by the Bangles
{'Monday': 'Just another manic Monday'}
Friday I'm in Love by the Cure
{'Friday': "Friday I'm in love", 'Tuesday': 'Tuesday can break my heart', 'Thursday': "Thursday doesn't even start", 'Wednesday': 'Wednesday can break my heart', 'Monday': 'Monday you can fall apart'}
どうしてこれなの?
name = ""
およびartist = ""
行は (おそらく) 不要であることは認識していますが、機能するため、質問する必要があります。なぜ週の辞書に載っていないのですか?