Classes and Objects in Python

classes and objects in python

A Python class is a blueprint that defines attributes and methods for objects. An object is a specific instance created from that class.

For example, a Car class defines what a car is: it has attributes like color and make, and methods like start() and stop(). A real car, like a red sedan, is an object of the Car class.

Classes help you structure programs. They make your code easy to read and manage.

Why Use Classes and Objects?

Using classes and objects brings important benefits:

  • Organized Code: Classes group related data and functions. This makes your code cleaner.
  • Reusability: You define a class once. Then you create many objects from it. This saves you from writing duplicate code.
  • Data Encapsulation: Classes keep data and methods together. This protects your data.
  • Code Modularity: Each class can work on its own. This makes debugging easier.

5 Steps to Use Classes and Objects in Python

Here’s how to work with classes and objects in Python.

Step 1: Define a Class

You define a class with the class keyword. Class names typically start with an uppercase letter.

Here’s an example:

class Dog:
    pass

This Dog class is empty. It is still a valid class.

Step 2: Add Attributes to a Class

Attributes are variables that belong to a class or object. You can define them in the __init__ method.

The __init__ method is a constructor. Python runs it automatically when you create a new object.

Use self as the first parameter in methods. It refers to the object itself.

Here’s how to add attributes:

class Dog:
    def __init__(self, name, breed):
        self.name = name    # Instance attribute
        self.breed = breed  # Instance attribute

    species = "Canis familiaris" # Class attribute

In this code:

  • name and breed are instance attributes. Each Dog object has its own name and breed.
  • species is a class attribute. All Dog objects share the same species value.

Step 3: Add Methods to a Class

Methods are functions inside a class. They perform actions on the object’s data.

Here’s how to add methods:

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    species = "Canis familiaris"

    def bark(self):
        print(f"{self.name} says Woof!")

    def describe(self):
        print(f"{self.name} is a {self.breed}.")

Now, the Dog class has bark() and describe() methods. These methods use the name and breed of a specific Dog object.

Step 4: Create Objects from a Class

To create an object from a class, call the class name. Pass any arguments the __init__ method needs.

Here’s how to create objects:

# Create two Dog objects
my_dog = Dog("Buddy", "Golden Retriever")
your_dog = Dog("Lucy", "Labrador")

print(my_dog.name)   # Output: Buddy
print(your_dog.breed) # Output: Labrador

Now my_dog and your_dog are separate Dog objects. Each has its own attributes.

Step 5: Access Attributes and Call Methods

You access an object’s attributes and call its methods using a dot (.).

Here’s how to do it:

my_dog = Dog("Buddy", "Golden Retriever")

# Access attributes
print(my_dog.name)      # Output: Buddy
print(my_dog.species)   # Output: Canis familiaris

# Call methods
my_dog.bark()           # Output: Buddy says Woof!
my_dog.describe()       # Output: Buddy is a Golden Retriever.

Best Practices for Classes and Objects

Follow these practices to write effective classes and objects:

  • Clear Names: Use descriptive names for classes, attributes, and methods.
  • Single Responsibility: Each class should do one main thing. This makes classes easier to manage.
  • Encapsulation: Keep data private when possible. Use methods to change data, not direct access.
  • Docstrings: Add docstrings to explain what your classes and methods do.
  • Understand self: Always put self as the first parameter in instance methods. It connects the method to its object.

Example: A Bank Account Class

Here’s a practical example of a BankAccount class:

class BankAccount:
    """Represents a simple bank account."""
    def __init__(self, account_number, owner_name, balance=0.0):
        """Initializes a new bank account."""
        self.account_number = account_number
        self.owner_name = owner_name
        self.balance = balance

    def deposit(self, amount):
        """Deposits money into the account."""
        if amount > 0:
            self.balance += amount
            print(f"Deposited {amount:.2f}. New balance: {self.balance:.2f}")
        else:
            print("Deposit amount must be positive.")

    def withdraw(self, amount):
        """Withdraws money from the account."""
        if amount > 0 and self.balance >= amount:
            self.balance -= amount
            print(f"Withdrew {amount:.2f}. New balance: {self.balance:.2f}")
        elif amount <= 0:
            print("Withdrawal amount must be positive.")
        else:
            print("Insufficient funds.")

    def get_balance(self):
        """Returns the current account balance."""
        return self.balance

# Create an account
account1 = BankAccount("12345", "Alice Smith", 1000.0)

# Interact with the account
account1.deposit(200.0)
account1.withdraw(500.0)
account1.deposit(100.0)
account1.withdraw(1000.0)

# Get the final balance
current_balance = account1.get_balance()
print(f"Account {account1.account_number} balance: {current_balance:.2f}")

This BankAccount class shows how to define attributes and methods. It demonstrates creating objects and using them.

Avatar photo
Great Learning Editorial Team
The Great Learning Editorial Staff includes a dynamic team of subject matter experts, instructors, and education professionals who combine their deep industry knowledge with innovative teaching methods. Their mission is to provide learners with the skills and insights needed to excel in their careers, whether through upskilling, reskilling, or transitioning into new fields.

Academy Pro Subscription

Grab 50% off
on Top Courses - Free Trial Available

×
Scroll to Top