In Python, object-oriented programming is based on the three important pillars which are inheritance, encapsulation, and polymorphism. These ideas facilitate the creation of modular, reusable, and maintainable code.
Inheritance is a process in which an object automatically inherits all the properties and behavior of its parent object in such a way that we can reuse, extend, or modify the properties and behaviors defined in the class.
Code repetition and redundancy can be minimized and facilitated by allowing a class (child class) to inherit methods and attributes from another class (parent class).
Encapsulation is the process of combining data and functions into a single unit called a class. In encapsulation, the data is not directly accessed; It is accessed through functions inside the class.
Private variables and methods are used to accomplish encapsulation, which limits access to certain parts of an object. This ensures that the external representation of an object is hidden from view.
In Python, polymorphism is the ability to present the same interface to different underlying forms (data types) with polymorphism. Each of these classes will have different underlying data.
It is possible to consider objects of distinct classes as belonging to the same superclass thanks to polymorphism. It's the capacity to apply a common procedure to many things in various ways.
Polymorphism implemented at compile time is known as compile-time polymorphism. This is typically achieved through operator overloading.
Operator overloading: Customizing the behavior of operators (+, -, *, etc.) for user-defined classes. This allows operators to operate differently depending on the context (i.e., the type of operand).
In this example, let's demonstrate the workflow of compile time polymorphism:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)
def __str__(self):
return f"Point({self.x}, {self.y})"
p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2
print(p3)
Output
Runtime polymorphism is achieved by method overriding, the call to the function is scheduled at runtime which is known as runtime polymorphism, or dynamic polymorphism.
Method Overriding: It is achieved when the child class contains a method that already exists
Parent class. When the child class overrides the method of the parent class then parent and child have the same function in different definitions.
In this example, let's demonstrate the workflow of runtime polymorphism:
class Animal:
def sound(self):
return "Some sound"
class Dog(Animal):
def sound(self):
return "Bark"
class Cat(Animal):
def sound(self):
return "Meow"
def make_sound(animal):
print(animal.sound())
dog = Dog()
cat = Cat()
make_sound(dog)
make_sound(cat)
Output
In this example, let's use a code sample to demonstrate these ideas. It has a Vehicle class (parent) and two subclasses, Car and Truck.
# Parent class
class Vehicle:
def __init__(self, make, year):
self._make = make # Protected variable (encapsulation)
self._year = year # Protected variable (encapsulation)
def display_info(self): # Polymorphic method
print(f"Vehicle Info: {self._year} {self._make}")
# Child class 1
class Car(Vehicle): # Inheritance
def __init__(self, make, year, model):
super().__init__(make, year) # Call to parent class constructor
self._model = model # Protected variable (encapsulation)
def display_info(self): # Method overriding (polymorphism)
print(f"Car Info: {self._year} {self._make} {self._model}")
# Child class 2
class Truck(Vehicle): # Inheritance
def __init__(self, make, year, capacity):
super().__init__(make, year) # Call to parent class constructor
self._capacity = capacity # Protected variable (encapsulation)
def display_info(self): # Method overriding (polymorphism)
print(f"Truck Info: {self._year} {self._make}, Capacity: {self._capacity} tons")
# Creating objects
vehicle = Vehicle("Generic", 2010)
car = Car("Honda", 2020, "Civic")
truck = Truck("Ford", 2018, 10)
# Demonstrating polymorphism
for v in [vehicle, car, truck]:
v.display_info()
Output
The protected variables _make and _year, which represent encapsulation, are part of the parent class Vehicle.
To demonstrate inheritance, consider the subclasses Car and Truck, which derive from Vehicle.
To show polymorphism, both Truck and Car override the Vehicle's display_info function. For both Car and Truck objects, this method yields distinct behaviors, while being called in the same way.
At the conclusion, a loop iterates over instances of Vehicle, Car, and Truck, invoking their respective display_info methods. This further demonstrates polymorphism by resolving at runtime to the proper method for each object.
Inheritance, encapsulation, and polymorphism are fundamental concepts in modular and extensible system design, and this code sample successfully exemplifies them.
In Python, object-oriented programming is based on the three important pillars which are inheritance, encapsulation, and polymorphism. These ideas facilitate the creation of modular, reusable, and maintainable code.
Inheritance is a process in which an object automatically inherits all the properties and behavior of its parent object in such a way that we can reuse, extend, or modify the properties and behaviors defined in the class.
Code repetition and redundancy can be minimized and facilitated by allowing a class (child class) to inherit methods and attributes from another class (parent class).
Encapsulation is the process of combining data and functions into a single unit called a class. In encapsulation, the data is not directly accessed; It is accessed through functions inside the class.
Private variables and methods are used to accomplish encapsulation, which limits access to certain parts of an object. This ensures that the external representation of an object is hidden from view.
In Python, polymorphism is the ability to present the same interface to different underlying forms (data types) with polymorphism. Each of these classes will have different underlying data.
It is possible to consider objects of distinct classes as belonging to the same superclass thanks to polymorphism. It's the capacity to apply a common procedure to many things in various ways.
Polymorphism implemented at compile time is known as compile-time polymorphism. This is typically achieved through operator overloading.
Operator overloading: Customizing the behavior of operators (+, -, *, etc.) for user-defined classes. This allows operators to operate differently depending on the context (i.e., the type of operand).
In this example, let's demonstrate the workflow of compile time polymorphism:
pythonclass Point: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Point(self.x + other.x, self.y + other.y) def __str__(self): return f"Point({self.x}, {self.y})" p1 = Point(1, 2) p2 = Point(3, 4) p3 = p1 + p2 print(p3)
Output
Runtime polymorphism is achieved by method overriding, the call to the function is scheduled at runtime which is known as runtime polymorphism, or dynamic polymorphism.
Method Overriding: It is achieved when the child class contains a method that already exists
Parent class. When the child class overrides the method of the parent class then parent and child have the same function in different definitions.
In this example, let's demonstrate the workflow of runtime polymorphism:
pythonclass Animal: def sound(self): return "Some sound" class Dog(Animal): def sound(self): return "Bark" class Cat(Animal): def sound(self): return "Meow" def make_sound(animal): print(animal.sound()) dog = Dog() cat = Cat() make_sound(dog) make_sound(cat)
Output
In this example, let's use a code sample to demonstrate these ideas. It has a Vehicle class (parent) and two subclasses, Car and Truck.
python# Parent class class Vehicle: def __init__(self, make, year): self._make = make # Protected variable (encapsulation) self._year = year # Protected variable (encapsulation) def display_info(self): # Polymorphic method print(f"Vehicle Info: {self._year} {self._make}") # Child class 1 class Car(Vehicle): # Inheritance def __init__(self, make, year, model): super().__init__(make, year) # Call to parent class constructor self._model = model # Protected variable (encapsulation) def display_info(self): # Method overriding (polymorphism) print(f"Car Info: {self._year} {self._make} {self._model}") # Child class 2 class Truck(Vehicle): # Inheritance def __init__(self, make, year, capacity): super().__init__(make, year) # Call to parent class constructor self._capacity = capacity # Protected variable (encapsulation) def display_info(self): # Method overriding (polymorphism) print(f"Truck Info: {self._year} {self._make}, Capacity: {self._capacity} tons") # Creating objects vehicle = Vehicle("Generic", 2010) car = Car("Honda", 2020, "Civic") truck = Truck("Ford", 2018, 10) # Demonstrating polymorphism for v in [vehicle, car, truck]: v.display_info()
Output
The protected variables _make and _year, which represent encapsulation, are part of the parent class Vehicle.
To demonstrate inheritance, consider the subclasses Car and Truck, which derive from Vehicle.
To show polymorphism, both Truck and Car override the Vehicle's display_info function. For both Car and Truck objects, this method yields distinct behaviors, while being called in the same way.
At the conclusion, a loop iterates over instances of Vehicle, Car, and Truck, invoking their respective display_info methods. This further demonstrates polymorphism by resolving at runtime to the proper method for each object.
Inheritance, encapsulation, and polymorphism are fundamental concepts in modular and extensible system design, and this code sample successfully exemplifies them.
Python is commonly used for developing websites and software, task automation, data analysis, and data visualisation. Since it's relatively easy to learn, Python has been adopted by many non-programmers, such as accountants and scientists, for a variety of everyday tasks, like organising finances.
Learning Curve: Python is generally considered easier to learn for beginners due to its simplicity, while Java is more complex but provides a deeper understanding of how programming works.
The point is that Java is more complicated to learn than Python. It doesn't matter the order. You will have to do some things in Java that you don't in Python. The general programming skills you learn from using either language will transfer to another.
Read on for tips on how to maximize your learning. In general, it takes around two to six months to learn the fundamentals of Python. But you can learn enough to write your first short program in a matter of minutes. Developing mastery of Python's vast array of libraries can take months or years.
6 Top Tips for Learning Python
The following is a step-by-step guide for beginners interested in learning Python using Windows.
Best YouTube Channels to Learn Python
Write your first Python programStart by writing a simple Python program, such as a classic "Hello, World!" script. This process will help you understand the syntax and structure of Python code.
The average salary for Python Developer is ₹5,55,000 per year in the India. The average additional cash compensation for a Python Developer is within a range from ₹3,000 - ₹1,20,000.
Copyrights © 2024 letsupdateskills All rights reserved