This is an archived version of the course. Please find the latest version of the course on the main webpage.

Chapter 4: Python modules

Creating your own module

face Josiah Wang

Let us try creating our own module!

Let’s say we will need a monster module, which we will use to write a software for kids to play with lots of monsters.

Copy the following code, and save it as libmonster.py. Note that I have named FACTOR in uppercase to indicate that it is a constant (a standard and recommended convention in Python).

FACTOR = 5

class Monster:
    def __init__(self, name="Me", food="cookies"):
        self.name = name
        self.food = food


def spawn_monsters():
    return [Monster("Happy", "carrots"), 
            Monster("Bashful", "ice-creams"), 
            Monster("Wild", "cookies")]


def calculate_growthrate(adjustment=3):
    return 25 * FACTOR + adjustment

If you run this script (i.e. python3 libmonster.py), nothing will happen (obviously, since these are all just definitions).

Now, let’s write another script to import and use our yummy libmonster module. Save the following file as game.py, in the same directory as libmonster.py.

import libmonster

print(libmonster.FACTOR)

print(libmonster.calculate_growthrate(2))

monsters = libmonster.spawn_monsters()

new_monster = libmonster.Monster("Crazy", "sashimi")
monsters.append(new_monster)

for monster in monsters:
    print(f"{monster.name} love {monster.food}!")

Then run python3 game.py, and it should work!

So, you now have a module called libmonster that you can import from any script (in our case, in game.py) 👾👾

A note that you should think of libmonster.spawn_monsters() as calling the spawn_monsters() function defined in the module libmonster, rather than a method for a libmonster object. libmonster acts more as a namespace to disambiguate where spawn_monsters() come from, rather than a class instance.