Object-Oriented Programming in Python

Can Arslan
4 min readApr 9, 2023

Object-Oriented Programming in Python

Object-oriented programming (OOP) is a programming paradigm that allows us to organize our code into objects with attributes and methods. Python is an object-oriented programming language, which means Python supports OOP concepts. In this blog post, we will explore object-oriented programming in Python with code examples.

Classes and Objects

A class is a blueprint for creating objects, while an object is an instance of a class. Classes are an essential aspect of OOP, and they help to organize and structure code. In Python, we can create a class using the class keyword.

Here’s an example:

class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
    def get_make(self):
return self.make
def get_model(self):
return self.model
def get_year(self):
return self.year

In the above code, we have defined a Car class with three attributes: make, model, and year. We have also defined three methods: get_make, get_model, and get_year, which return the respective attribute values.

To create an object of the Car class, we can simply call the class with the necessary arguments:

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

We can then access the object’s attributes and methods using the dot notation:

print(my_car.get_make())  # Output: Toyota
print(my_car.get_model()) # Output: Camry
print(my_car.get_year()) # Output: 2020

Inheritance

Inheritance is a mechanism in OOP that allows us to create a new class by extending an existing class. The new class inherits all the attributes and methods of the existing class and can also have its own attributes and methods. Inheritance is a powerful tool that helps to reduce code duplication and improve code organization.

Here’s an example:

class ElectricCar(Car):
def __init__(self, make, model, year, battery_size):
super().__init__(make, model, year)
self.battery_size = battery_size
    def get_battery_size(self):
return self.battery_size

In the above code, we have defined an ElectricCar class that inherits from the Car class. We have added a new attribute battery_size and a new method get_battery_size.

To create an object of the ElectricCar class, we can call it with the necessary arguments:

my_electric_car = ElectricCar("Tesla", "Model S", 2021, 100)

We can then access the object’s attributes and methods using the dot notation:

print(my_electric_car.get_make())  # Output: Tesla
print(my_electric_car.get_model()) # Output: Model S
print(my_electric_car.get_year()) # Output: 2021
print(my_electric_car.get_battery_size()) # Output: 100

Encapsulation

Encapsulation is the process of hiding the implementation details of an object from the outside world. In Python, we can achieve encapsulation by using private attributes and methods. Private attributes and methods are denoted by a double underscore prefix.

Here’s an example:

class BankAccount:
def __init__(self, account_number, balance):
self.__account_number = account_number
self.__balance = balance
    def deposit(self, amount):
self.__balance += amount
def withdraw(self, amount):
if amount <= self.__balance:
self.__balance -= amount
else:
print("Insufficient funds")
def get_balance(self):
return self.__balance

In the above code, we have defined a BankAccount class with two private attributes: __account_number and __balance. We have also defined three methods: deposit, withdraw, and get_balance. The deposit and withdraw methods modify the private __balance attribute, while the get_balance method returns the private __balance attribute.

To create an object of the BankAccount class, we can call it with the necessary arguments:

my_account = BankAccount("1234567890", 1000)

We can then access the object’s methods using the dot notation:

my_account.deposit(500)
print(my_account.get_balance()) # Output: 1500
my_account.withdraw(2000)  # Output: Insufficient funds
print(my_account.get_balance()) # Output: 1500
my_account.withdraw(500)
print(my_account.get_balance()) # Output: 1000

Polymorphism

Polymorphism is the ability of objects of different classes to be used interchangeably. Polymorphism is a powerful tool that helps to make code more flexible and reusable.

Here’s an example:

class Shape:
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2

In the above code, we have defined a Shape class with an area method. We have also defined two classes that inherit from the Shape class: Rectangle and Circle. Both classes have their own implementation of the area method.

To use polymorphism, we can create objects of each class and call the area method:

my_rectangle = Rectangle(5, 10)
my_circle = Circle(7)
print(my_rectangle.area())  # Output: 50
print(my_circle.area()) # Output: 153.86

Conclusion

Object-oriented programming is a powerful paradigm that allows us to write code that is organized, reusable, and easy to maintain. In this post, we have explored some of the key concepts of OOP in Python, including classes and objects, inheritance, encapsulation, and polymorphism. With these tools at our disposal, we can create robust and flexible software that meets the needs of our users.

--

--