Class Attributes and Methods Lab (CodeGrade)

Close

Learning Goals


Key Vocab


Introduction

In this lab, we'll be dealing with a Song class. The Song class can produce individual songs. Each song has a name, an artist and a genre. We need our Song class to be able to keep track of the number of songs that it creates.

Song.count
# => 30

We need our Song class to be able to show us all of the artists of existing songs:

Song.artists
# ["Jay-Z", "Drake", "Beyonce"]

We need our Song class to be able to show us all of the genres of existing songs:

Song.genres
# => ["Rap", "Pop"]

We also need our Song class to be able to keep track of the number of songs of each genre it creates.

In other words, calling:

Song.genre_count

Should return something like this;

{"Rap": 5, "Rock": 1, "Country": 3}

Lastly, we want our Song class to reveal to us the number of songs each artist is responsible for.

Song.artist_count
# {"Beyonce": 17, "Jay-Z": 40}

We'll accomplish this with the use of class attributes and class methods.


Instructions

Define your Song class such that an individual song is initialized with a name, artist and genre.

ninety_nine_problems = Song("99 Problems", "Jay-Z", "Rap")

ninety_nine_problems.name
# "99 Problems"

ninety_nine_problems.artist
# "Jay-Z"

ninety_nine_problems.genre
# "Rap"

Create a class attribute, count. We will use this attribute to keep track of the number of new songs that are created from the Song class. Set this attribute equal to 0.

At what point should we increment our count of songs? Whenever a new song is created. Your __init__ method should call a class method add_song_to_count() that increments the value of count by one.

Next, define the following class methods:

add_to_genres(): adds any new genres to a class attribute genres, a list. This list should contain only unique genres — no duplicates! Think about what you'll need to do to get this method working:

add_to_artists(): adds any new artists to a class attribute artists, a list. This list should only contain unique artists, just like the genres class attribute. Once again, thnk about what you need to do to implement this behavior:

add_to_genre_count(): adds to a class attribute genre_count, a dictionary in which the keys are the names of each genre. Each genre name key should point to a value that is the number of songs that have that genre.

Song.genre_count
# {"Rap": 5, "Rock": 1, "Country": 3}

This manner of displaying numerical data is called a histogram Links to an external site.. How will you create your histogram? There are a few ways!

add_to_artist_count(): creates a histogram similar to the one above, but for artists rather than genres.


Resources