Classes are used to create objects that have properties (attributes) and behaviors (methods). Classes provide a way to define a blueprint or template for creating objects of a specific type.

Let's take an example of a Car class to understand how classes work:

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def start_engine(self):
        print("Engine started!")

    def stop_engine(self):
        print("Engine stopped!")

    def drive(self):
        print("Car is being driven!")

In this code, we define a Car class. The __init__ method is a special method called a constructor, which is executed when a new object is created from the class. It initializes the attributes make, model, and year with the values passed as arguments.

The class also has three methods: start_engine, stop_engine, and drive. These methods define the behaviors of the Car objects. When called, they perform specific actions related to the car, such as starting the engine, stopping the engine, or driving the car.

To create an object (instance) of the Car class, we can do the following:

my_car = Car("Toyota", "Camry", 2022)

In this code, we create a new Car object called my_car by calling the Car class and passing the make, model, and year as arguments.

We can then access the attributes and call the methods of the my_car object:

print(my_car.make)  # Output: Toyota
print(my_car.model)  # Output: Camry
print(my_car.year)  # Output: 2022

my_car.start_engine()  # Output: Engine started!  # Output: Car is being driven!
my_car.stop_engine()  # Output: Engine stopped!

In this code, we access the attributes make, model, and year of the my_car object and print their values. We also call the methods start_engine, drive, and stop_engine to perform the corresponding actions on the my_car object.

Classes allow us to create objects that encapsulate data and behavior, making your code more organized and modular. They provide a way to define custom types and create multiple instances (objects) of those types.