Skip to main content

Command Palette

Search for a command to run...

Mastering Object-Oriented Programming in Python PART:1

Published
•6 min read•View as Markdown
Mastering Object-Oriented Programming in Python PART:1
S

Hello, I'm Sheheryar Altaf, a BSCS student at COMSATS University Islamabad. Passionate about computer science, I'm dedicated to mastering Object-Oriented Programming (OOP), Data Structures and Algorithms (DSA), and databases.

I have practical experience in projects like the Voting Management System database, where I've applied these skills hands-on.

I'm eager to tackle new challenges and continuously expand my knowledge and skills in computer science. Here's to excelling in my studies and embracing endless possibilities!

Understanding Classes and Objects in Python

Classes and objects are fundamental concepts in Python's object-oriented programming (OOP). They help in organizing and managing data and functionality. Here’s a clear explanation with engaging examples:


What is a Class?

A class in Python is a blueprint for creating objects. It defines the attributes and methods that the objects created from it will have. Think of a class as a detailed design or recipe.

Example:

Imagine you have a Monster class in a game:

class Monster:
    def __init__(self, strength, name, type):
        self.strength = strength
        self.name = name
        self.type = type

    def growl(self):
        return f"{self.name} growls!"

    def attack(self):
        return f"{self.name} attacks with {self.strength} strength!"

This Monster class outlines what all monsters should have (strength, name, type) and be able to do (growl(), attack()).


What is an Object?

An object is an instance of a class. It is a specific realization of the class’s blueprint. If the class is a recipe, then the object is the actual dish made from that recipe.

Example:

You could create a specific monster object named dragon:

dragon = Monster(100, "Dragon", "Fire")

Creating an Object

To create an object, you use the class as a template and initialize it with specific values.

Example:

Using the Monster class:

dragon = Monster(100, "Dragon", "Fire")

This line creates a new Monster object named dragon with the attributes strength, name, and type initialized.


Accessing Object Attributes and Methods

You can interact with an object by accessing its attributes and calling its methods. This allows you to modify its data and invoke its behaviors.

Example:

For the dragon object:

print(dragon.growl())  # Output: Dragon growls!
print(dragon.attack())  # Output: Dragon attacks with 100 strength!

Instance Variables and Methods

  • Instance Variables: These are data attributes defined in the class that each object will hold. They represent the state of the object.

  • Methods: These are functions defined in the class that describe the behaviors or actions of the object.

Example:

For the Monster class:

  • strength, name, and type are instance variables.

  • growl() and attack() are methods.


Access Modifiers in Python

Python uses naming conventions for access control:

  • Public: Accessible from anywhere.

  • Protected: Intended for use within the class and its subclasses. Denoted by a single underscore _.

  • Private: Intended to be accessed only within the class. Denoted by double underscores __.

Example:

class Monster:
    def __init__(self, strength, name, type):
        self.__strength = strength
        self._name = name
        self.type = type

    def growl(self):
        return f"{self._name} growls!"

    def attack(self):
        return f"{self._name} attacks with {self.__strength} strength!"

Name Mangling:

Python mangles private attribute names to make them less accessible from outside the class. This helps avoid conflicts with names in subclasses.

Example:

print(dragon._Monster__strength)  # Accessing the mangled private attribute

Here, __strength is transformed to _Monster__strength, making it harder to access directly but still possible. Use getters and setters for safe access.


Understanding Constructors in Python

Constructors in Python are special methods used to initialize objects when they are created. They help set up an object with initial values, making it easier to manage and use objects effectively.


What is a Constructor?

A constructor is a special method that gets called when an object is instantiated. It is used to initialize the object’s attributes with specific values.

Example:

Imagine a Student class where we want to initialize student details like roll number, name, and marks:

class Student:
    def __init__(self, roll, name, marks):
        self.roll = roll
        self.name = name
        self.marks = marks

Here, __init__ is the constructor. It sets the roll number, name, and marks attributes when a Student object is created.


Default Constructor

In Python, if no constructor is defined, a default constructor is used which doesn’t initialize attributes. If you do define a constructor, it must initialize the object with specific values.

Example:

With a default constructor:

class Student:
    pass

student = Student()

Here, the student object is created with default values.


Constructor Overloading

Python doesn’t support traditional constructor overloading (having multiple constructors with different parameters) as some other languages do. Instead, you can use default parameters or variable-length argument lists to handle different initialization scenarios.

Example:

To handle different initialization scenarios, you can use default parameters or variable-length arguments:

class Student:
    def __init__(self, roll, name, marks=0):
        self.roll = roll
        self.name = name
        self.marks = marks

student1 = Student(1, "Alice", 90)
student2 = Student(2, "Bob")

Here, student1 is initialized with all parameters, while student2 uses default values for marks.


Using self Keyword

The self keyword is used within the constructor to refer to the object itself. It allows access to the object's attributes and methods.

Example:

In the Student class:

class Student:
    def __init__(self, roll, name, marks):
        self.roll = roll
        self.name = name
        self.marks = marks

When you create a Student object, self refers to that specific object, allowing you to set its attributes.


Understanding Inheritance in Python

Inheritance allows a class (child) to inherit attributes and methods from another class (parent). This promotes code reuse and organization.

Basic Concepts

  • Base Class (Parent Class): The class whose properties and methods are inherited.

  • Derived Class (Child Class): The class that inherits from the base class and can have additional attributes and methods.

Example: Basic Inheritance

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return f"{self.name} makes a sound."

class Dog(Animal):
    def speak(self):
        return f"{self.name} barks."

dog = Dog("Buddy")
print(dog.speak())  # Output: Buddy barks.

Explanation:

  • Dog inherits from Animal. It overrides the speak method to provide specific behavior.

Constructor Initialization with super()

Use super() in the child class to call the parent class’s constructor and initialize inherited attributes.

class Animal:
    def __init__(self, name):
        self.name = name

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

dog = Dog("Buddy", "Golden Retriever")
print(dog.name)  # Output: Buddy
print(dog.breed)  # Output: Golden Retriever

Explanation:

  • Dog calls super().__init__(name) to initialize the name attribute from the Animal class.

Types of Inheritance

  1. Single Inheritance: A class inherits from one parent class.

     class Animal:
         pass
    
     class Dog(Animal):
         pass
    
  2. Multiple Inheritance: A class inherits from multiple parent classes.

     class Flyer:
         def fly(self):
             return "Flying"
    
     class Swimmer:
         def swim(self):
             return "Swimming"
    
     class Duck(Flyer, Swimmer):
         pass
    
  3. Multilevel Inheritance: A class inherits from a class that inherits from another class.

     class Animal:
         pass
    
     class Mammal(Animal):
         pass
    
     class Human(Mammal):
         pass
    
  4. Hierarchical Inheritance: Multiple classes inherit from a single parent class.

     class Animal:
         pass
    
     class Dog(Animal):
         pass
    
     class Cat(Animal):
         pass
    

Method Overriding

A child class can provide a specific implementation for a method already defined in the parent class.

class Animal:
    def speak(self):
        return "Animal makes a sound."

class Dog(Animal):
    def speak(self):
        return "Dog barks."

dog = Dog()
print(dog.speak())  # Output: Dog barks.

Explanation:

  • Dog overrides the speak method of Animal to provide its own implementation.

Inheritance allows classes to extend and customize behaviors from parent classes, promoting code reuse and organization.

Method Overloading: Multiple methods with the same name but different parameters in the same class (not directly supported in Python).

2 views

More from this blog

sheheryar altaf's blog

21 posts