2. Object-Oriented Programming (OOP)
• What is OOP?
• Programming paradigm focusing on objects rather than just functions + data
• Objects encapsulate data (attributes) and functions (methods)
• Benefits of OOP
• Modularity, reusability, maintainability
• Abstraction, encapsulation, inheritance, polymorphism
3. Classes and Objects
• A class is a new data type
• Objects are instances of a class
class Shape:
def __init__(self, name, num_sides):
self.name = name
self.num_sides = num_sides
def describe(self):
print(f"I am a {self.num_sides}-sided {self.name}.")
triangle = Shape("Triangle", 3)
square = Shape("Square", 4)
triangle.describe() # Output: I am a 3-sided Triangle.
square.describe() # Output: I am a 4-sided Square.
4. Attributes
• Instance attributes
• Defined in the __init__ method
• Accessible through the self keyword
• Class attributes
• Defined outside of methods, shared among all instances
5. Methods
• Instance methods
• Defined with self parameter
• Access and modify instance attributes
• Class methods
• Defined with cls parameter
• Access and modify class attributes
• Static methods
• No self or cls parameter
• Standalone functions within the class
class Shape:
name = "Shape"
def __init__(self, n):
self.side = n
@classmethod
def get_class_name(cls):
return cls.name
@staticmethod
def add(x, y):
return x + y
@staticmethod
def multiply(x, y):
return x * y
# Usage
print(Shape.get_class_name()) # Output: Shape
6. Inheritance
• A class (child class, subclass) can inherit all methods and attributes of
another class (parent class, super class)
class Polygon(Shape):
def __init__(self, name, n, a):
super().__init__(name, n)
self.angle = a
def interior_angle(self):
print(f"The interior angle of a {self.name} is {self.angle} degrees.")
pol = Polygon("Hexagon", 6, 60)
pol.describe()
7. Polymorphism
• Objects of different classes can be treated as the same type
• Example: describe() method for different shapes
class Circle(Shape):
def __init__(self, radius):
super().__init__("Circle", 0)
self.radius = radius
def describe(self):
print(f"I am a circle with a radius of {self.radius} units.")
shapes = [Shape("Square", 4), Polygon("Pentagon", 5, 108), Circle(7)]
for shape in shapes:
shape.describe()
8. Encapsulation
• Hiding implementation details from
outside users
• Private attributes and methods
Prefixed with __ (double underscore)
• Non accessible from outside the class
• Protected attributes and methods
Prefixed with _ (single underscore)
• Accessible outside the class but meant
for internal use only
class Rectangle(Shape):
def __init__(self, length, width):
super().__init__("Rectangle", 4)
self.__length = length
self.__width = width
def get_area(self):
return self.__length * self.__width
def set_length(self, new_length):
self.__length = new_length
def set_width(self, new_width):
self.__width = new_width
9. Conclusion
• OOP is a powerful programming paradigm in Python
• Classes, objects, inheritance, polymorphism, and encapsulation are key
concepts
• OOP promotes modularity, reusability, and maintainability in code