Lesson 8
Making Objects the Main Star!
Chapter 3: Classes and attributes
Dictionaries revisited
Back in Lesson 7, you have represented the structure of an object using dict
, with various object attributes as keys to the dictionary.
person = {"id": "00-01-30", "name": "Ali", "age": 23,
"occupation": "student", "nationality": "uk"}
if person["id"] == "00-01-03":
print(person["name"])
print(person["nationality"])
Such dict
structures provide a higher level abstraction over simple data types, allowing you to represent an entity as a single unit.
In your mind, however, you will likely still be thinking that person
is a dict
with some keys
and values
.
Can we go one step further and provide yet another level of abstraction, so that when you read your code, you will think of person
as a Person
, rather than a dict
?
For example, try reading the code below. Does it feel easier and even more natural to read than the version above?
person = Person(id="00-01-30", name="Ali", age=23,
occupation="student", nationality="uk")
if person.id == "00-01-03":
print(person.name)
print(person.nationality)
You might have even visualised the person in your mind, and read the code as “person
is a Person named Ali with id 00-01-30, etc., and if the person’s id is 00-11-03, then print the person’s name and the person’s nationality.”
Such code is arguably easier to read and write, since you are modelling some concrete object/entity that you can imagine in your mind, rather than something more abstract and generic like a variable
or a dict
.
Another issue with dict
is that it will be difficult to enforce that a person
must have a name
or a nationality
. You might end up with cases where the dict
has no keys for name
or nationality
. Then what happens? Would it not be nice if you can easily be more consistent, and can pre-define what attribute a person
must have, so that you can easily remember (or be enforced) to provide this when coding?
In this chapter, you will build on these ideas, and create your own complex data type such as for a Person
above. You can then create objects out of your custom data type and use them!