You’ll kick off this course with a review of object-oriented programming (OOP). We’ll use this topic as a springboard for diving into other core Python topics.
This text is part of a Real Python tutorial by David Amos.
Object-oriented programming (OOP) in Python lets you structure your code by grouping related properties and behaviors into individual objects. You create classes as blueprints and instantiate them to form objects. With OOP, you can model real-world entities and their interactions, and create complex systems with reusable components.
Conceptually, objects are like the components of a system. Think of a program as a factory assembly line of sorts. At each step of the as- sembly line a system component processes some material, ultimately transforming raw material into a finished product.
An object contains data, like the raw or preprocessed materials at each step on an assembly line, and behavior, like the action each assembly line component performs.
In this section, you’ll review how to:
- Create a class, which is like a blueprint for creating an object
- Use classes to create new objects
You’ll continue reviewing OOP later this week.
What Is Object-Oriented Programming in Python?
Object-oriented programming is a programming paradigm that provides a means of structuring programs so that properties and behaviors are bundled into individual objects.
For example, an object could represent a person with properties like a name, age, and address and behaviors such as walking, talking, breathing, and running. Or it could represent an email with properties like a recipient list, subject, and body and behaviors like adding attachments and sending.
Put another way, object-oriented programming is an approach for modeling concrete, real-world things, like cars, as well as relations between things, like companies and employees or students and teachers. OOP models real-world entities as software objects that have some data associated with them and can perform certain operations.
The key takeaway is that objects are at the center of object-oriented programming in Python. In other programming paradigms, objects only represent the data. In OOP, they additionally inform the overall structure of the program.
How Do You Define a Class in Python?
In Python, you define a class by using the class
keyword followed by a name and a colon. Then you use .__init__()
to declare which attributes each instance of the class should have:
class Employee:
def __init__(self, name, age):
self.name = name
self.age = age
But what does all of that mean? And why do you even need classes in the first place? Take a step back and consider using built-in, primitive data structures as an alternative.
Primitive data structures—like numbers, strings, and lists—are designed to represent straightforward pieces of information, such as the cost of an apple, the name of a poem, or your favorite colors, respectively. What if you want to represent something more complex?
For example, you might want to track employees in an organization. You need to store some basic information about each employee, such as their name, age, position, and the year they started working.
One way to do this is to represent each employee as a list:
kirk = ["James Kirk", 34, "Captain", 2265]
spock = ["Spock", 35, "Science Officer", 2254]
mccoy = ["Leonard McCoy", "Chief Medical Officer", 2266]
There are a number of issues with this approach.
First, it can make larger code files more difficult to manage. If you reference kirk[0]
several lines away from where you declared the kirk
list, will you remember that the element with index 0
is the employee’s name?
Second, it can introduce errors if employees don’t have the same number of elements in their respective lists. In the mccoy
list above, the age is missing, so mccoy[1]
will return "Chief Medical Officer"
instead of Dr. McCoy’s age.