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

Chapter 3: Encapsulation

Encapsulation

face Josiah Wang

In this chapter, we will discuss the remaining ‘pillar’ of OOP known as encapsulation.

In our discussions so far, we have been assuming that all attributes of a class instance can be directly accessed and modified by any other object.

But should our objects really expose everything, including their internal states, for the whole world to see and manipulate?

As an example, let’s look at our RPG Hero class from our core lessons. If you recall, a Hero has a health attribute and an attack attribute. Anybody can directly change their values. So we can have our EvilBoss below directly setting our hero’s health and attack to zero. So EvilBoss is basically just asking the character to drop dead without even fighting, and your Hero is obliged to do so since it has given everyone direct access to those attributes.

class EvilBoss:
    def destroy(self, hero):
        hero.health = 0
        hero.attack = 0

Therefore, there are times in OOP when you do not want to expose your attributes directly. For example, you might not want someone else to modify your attributes directly (maybe you want to ensure that the values are legal). Or you want to embellish your attributes before allowing someone to access it (i.e. putting on some makeup). Sort of like you putting on a face mask before going out, in case someone passes a certain virus to you! Therefore, you should not make these attributes publicly accessible to others. This is what encapsulation is - only exposing what is necessary, and hiding things that are not!