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 ofdifferent 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 implementationdetails 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 isa powerful programming paradigm in Python • Classes, objects, inheritance, polymorphism, and encapsulation are key concepts • OOP promotes modularity, reusability, and maintainability in code