【Python Primer】Let's Open the Door to Object-Oriented Programming! Basics of Classes, How to Create and Use Them (class, __init__, methods) #7
Welcome back to our Python Primer series! In Part 6, we learned how functions help us organize and reuse blocks of code. Today, we're going to open the door to an even more powerful way of structuring our programs: Object-Oriented Programming (OOP). This might sound a bit intimidating, but at its core, OOP is about modeling real-world (or conceptual) "things" in our code. We'll start this journey by learning about classes and objects.
Imagine instead of just writing a list of instructions (procedural programming), you could create "smart" entities in your program that have their own data (characteristics) and can perform their own actions (behaviors). That's the essence of OOP! Python is an object-oriented language, and understanding classes is your first step into this paradigm.
In this post, we'll gently introduce the basic concepts of OOP, learn how to define our own "blueprints" for objects using the class keyword, understand the special __init__ method for setting up objects, and see how to add behaviors with methods.
What is Object-Oriented Programming (OOP)? A Gentle Introduction
Object-Oriented Programming (OOP) is a programming paradigm based on the concept of "objects." These objects can contain both data (often called attributes or properties) and code in the form of procedures (often called methods).
Think about the real world. It's full of objects: a car, a dog, a book, a person. Each of these objects has:
- Characteristics (Data/Attributes): A car has a color, model, and speed. A dog has a name, breed, and age.
- Behaviors (Code/Methods): A car can start, accelerate, and brake. A dog can bark, eat, and sleep.
OOP allows us to model these real-world entities (or even abstract concepts like a "user account" or a "transaction") in our software by bundling their data and behaviors together.
Some key (simplified) benefits of OOP include:
- Better Organization: Code becomes more structured and easier to manage, especially in large projects.
- Reusability: You can create "blueprints" (classes) and reuse them to create multiple "things" (objects).
- Intuitive Modeling: It often feels more natural to think about problems in terms of objects and their interactions.
(OOP has other important concepts like inheritance, polymorphism, and encapsulation, but we'll focus on the very basics – classes and objects – today.)
Classes and Objects: Blueprints and Actual Things
These are two fundamental concepts in OOP:
- Class: A class is like a blueprint, template, or a cookie cutter. It defines the structure and behavior for objects of a certain type. It doesn't represent an actual "thing" itself, but rather the plan for making those things.
Example: A class namedCarwould define that all cars will have attributes likecolorandbrand, and methods likestart_engine()andaccelerate(). - Object (Instance): An object is an actual instance created from a class. It's a concrete "thing" that exists in your program's memory, built according to the class blueprint. Each object has its own specific values for its attributes.
Example: IfCaris the class, thenmy_red_toyotacould be one object (an instance ofCar) withcolor="red"andbrand="Toyota".your_blue_fordcould be another object withcolor="blue"andbrand="Ford". Both are cars, but they are distinct objects with their own details.
Defining Your First Class (The class Keyword)
In Python, you define a class using the class keyword.
Syntax:
class ClassName:
# The body of the class goes here
# This is where we'll define attributes and methods
pass # 'pass' is a placeholder statement that does nothing.
# It's used when a statement is syntactically required but you don't want any code to execute.
class: The keyword that tells Python you are defining a new class.ClassName: The name you give to your class. Naming Convention: Class names in Python should conventionally start with a capital letter and useCapWords(also known as PascalCase) style. For example:MyClass,ElectricCar,UserProfile. This helps distinguish classes from functions and variables (which usually usesnake_case).:: A colon marks the end of the class definition line.- Indented class body: All code belonging to the class (like method definitions) must be indented.
The __init__ Method: Initializing Your Objects (The Constructor)
When you create a new object from a class, you often want to set up its initial state – that is, give its attributes some starting values. The __init__ method (pronounced "dunder init" because of the double underscores) is a special method in Python that gets called automatically right when an object is created. It's often referred to as the "constructor."
Syntax:
class ClassName:
def __init__(self, parameter1, parameter2, ...):
# 'self' is always the first parameter for __init__ and other instance methods
# This is where you initialize the object's attributes
self.attribute_name1 = parameter1
self.attribute_name2 = "some default value or derived from parameter2"
# ... more attributes
The `self` Parameter:
The self parameter is crucial:
- It must be the first parameter of
__init__and any other method defined within a class that operates on an instance. - It refers to the specific object (instance) that is being created or that the method is being called on.
- You use
selfto attach attributes (data) to the object. For example,self.name = "Fido"creates an attribute callednameon the object referred to byselfand assigns it the value "Fido".
When you call a method like my_object.some_method(arg1, arg2), Python automatically passes my_object as the self argument to the method.
Instance Attributes:
Attributes defined using self.attribute_name = value inside methods like __init__ are called instance attributes. They store data that is specific to each object (each instance) of the class.
Example: A Simple Dog Class
class Dog:
def __init__(self, input_name, input_breed):
# These are instance attributes
self.name = input_name # Store the dog's name
self.breed = input_breed # Store the dog's breed
self.tricks = [] # Each dog starts with an empty list of tricks
# We'll add more methods (behaviors) later!
Here, whenever we create a Dog object, we'll need to provide a name and a breed, which will then be stored in that specific dog object's name and breed attributes.
Creating Objects (Instantiation)
Creating an object from a class is called "instantiation." You do this by "calling" the class name as if it were a function, passing any arguments required by its __init__ method (except for self, which Python handles automatically).
Example (continuing with Dog):
# Define the Dog class (as above)
class Dog:
def __init__(self, input_name, input_breed):
self.name = input_name
self.breed = input_breed
self.tricks = []
# Now, let's create some Dog objects (instances)
dog1 = Dog("Buddy", "Golden Retriever") # This calls __init__ with "Buddy" for input_name, "Golden Retriever" for input_breed
dog2 = Dog("Lucy", "Poodle")
# dog1 and dog2 are now two distinct Dog objects in memory.
# Each has its own 'name', 'breed', and 'tricks' attributes.
Accessing Attributes
Once you have an object, you can access (get or set) its attributes using dot notation: object_variable.attribute_name.
Example:
# (Assuming Dog class and dog1, dog2 objects are defined as above)
# Accessing and printing attributes
print(f"{dog1.name} is a {dog1.breed}.")
print(f"{dog2.name} is a friendly {dog2.breed}.")
# You can also modify attributes
dog1.name = "Best Buddy" # Changed Buddy's name
print(f"Dog1's new name is: {dog1.name}")
Output:
Buddy is a Golden Retriever.
Lucy is a friendly Poodle.
Dog1's new name is: Best Buddy
Adding Behavior: Methods
Methods are functions that are defined *inside* a class. They define the actions or behaviors that objects of that class can perform. Just like __init__, methods also need self as their first parameter to allow them to access and manipulate the object's own attributes and call other methods of that object.
Defining and Calling Methods:
class Dog:
def __init__(self, input_name, input_breed):
self.name = input_name
self.breed = input_breed
self.energy_level = 100 # Let's add an energy attribute
# This is a method
def bark(self):
print(f"{self.name} says: Woof woof!")
self.energy_level -= 5 # Barking uses some energy
# Another method
def play_fetch(self, times):
if self.energy_level > 20 * times:
print(f"{self.name} happily plays fetch {times} times!")
self.energy_level -= 20 * times
else:
print(f"{self.name} is too tired to play that much fetch.")
def check_energy(self):
print(f"{self.name}'s energy level: {self.energy_level}")
# Create a Dog object
my_dog = Dog("Rex", "German Shepherd")
# Call its methods
my_dog.bark()
my_dog.check_energy()
my_dog.play_fetch(3)
my_dog.check_energy()
my_dog.play_fetch(10) # Might be too tired
my_dog.check_energy()
Output might look like:
Rex says: Woof woof!
Rex's energy level: 95
Rex happily plays fetch 3 times!
Rex's energy level: 35
Rex is too tired to play that much fetch.
Rex's energy level: 35
Notice how methods like bark and play_fetch use self to access the object's name and energy_level attributes.
The Door to OOP is Open!
Congratulations! You've just taken your first steps into Object-Oriented Programming with Python. It's a big topic, but understanding these fundamentals is key:
- Classes are blueprints for creating objects (
class ClassName:). RememberCapWordsnaming! - Objects (Instances) are specific things created from a class.
- The
__init__(self, ...)method is a special constructor called when an object is created, used to initialize its attributes (e.g.,self.attribute = value). - The
selfparameter refers to the instance itself and is the first parameter for instance methods. - Attributes are data associated with an object (e.g.,
my_object.attribute). - Methods are functions defined within a class that define an object's behaviors (e.g.,
my_object.method()).
This is just the beginning. OOP includes more advanced concepts like inheritance, polymorphism, and encapsulation, which allow for even more powerful and flexible code design. But for now, practice creating your own simple classes. Try to model everyday objects around you: a Book (with attributes like title, author, pages, and methods like open(), read_page()), a BankAccount, or a Student.
In our next lesson, we might explore how to import and use code from other Python files (modules) or delve into how Python handles errors and exceptions!
コメント
コメントを投稿