StudyLover
  • Home
  • Study Zone
  • Profiles
  • Contact us
  • Sign in
StudyLover Inheritance
Download
  1. Python
  2. OOP: A Comprehensive Guide
Persistent Storage of Objects : Polymorphism
OOP: A Comprehensive Guide

Inheritance

Inheritance is a fundamental concept in object-oriented programming that allows classes to inherit attributes and methods from a parent class. This promotes code reusability and creates a hierarchical relationship between classes.  

Basic Syntax:

Python

class ChildClass(ParentClass):

  pass

Key Points:

  • The ChildClass inherits all attributes and methods from the ParentClass.

  • The ChildClass can override or extend the inherited methods.

  • Inheritance creates a "is-a" relationship between the classes.

Example:

Python

class Animal:

  def __init__(self, name):

    self.name = name

 

  def make_sound(self):

    pass

 

class Dog(Animal):

  def make_sound(self):

    print("Woof!")  

 

 

class Cat(Animal):

  def make_sound(self):

    print("Meow!")  

In this example, Dog and Cat inherit from the Animal class. They inherit the name attribute and can override the make_sound() method.

Types of Inheritance:

  • Single inheritance: A class inherits from a single parent class.

  • Multiple inheritance: A class inherits from multiple parent classes.  

  • Multi-level inheritance: A class inherits from another class that itself inherits from a parent class.

Best Practices:

  • Use inheritance judiciously. Overusing inheritance can make code complex and difficult to understand.

  • Follow the "is-a" relationship when designing class hierarchies.

  • Avoid multiple inheritance if possible, as it can lead to diamond problem issues.

  • Use polymorphism to achieve code flexibility.

Polymorphism:

Polymorphism allows objects of different classes to be treated as if they were of the same type. This is achieved through method overriding.

Python

class Animal:

  def make_sound(self):

    pass

 

# ... (same as previous example)

 

animals = [Dog("Buddy"), Cat("Whiskers")]

 

for animal in animals:

  animal.make_sound()

By understanding inheritance and polymorphism, you can create well-structured and reusable code in Python.

 

Creating a Child Class in Python

Inheritance is a fundamental concept in object-oriented programming that allows you to create new classes based on existing ones. The new class, called a child class or subclass, inherits the attributes and methods of the parent class.  

Syntax:

Python

class ChildClass(ParentClass):

  pass

Example:

Python

class Animal:

  def __init__(self, name):

    self.name = name

 
  def make_sound(self):

    pass

 
class Dog(Animal):

  def make_sound(self):

    print(f"{self.name}   

 
 says Woof!")

 
class Cat(Animal):

  def make_sound(self):

    print(f"{self.name} says Meow!")   

 
 

In this example, Dog and Cat are child classes of the Animal class. They inherit the name attribute from the parent class and override the make_sound() method to provide their own specific behavior.

Key Points:

  • The ChildClass inherits all attributes and methods from the ParentClass.

  • The ChildClass can override or extend the inherited methods.

  • Inheritance creates an "is-a" relationship between the classes.

Additional Considerations:

  • Constructor Chaining: To call the parent class's constructor, use the super() function:

Python

class Dog(Animal):

    def __init__(self, name, breed):

        super().__init__(name)

        self.breed = breed

  • Method Overriding: Child classes can override methods defined in the parent class to provide their own implementation.

  • Multiple Inheritance: A class can inherit from multiple parent classes. However, be cautious of the "diamond problem" and use multiple inheritance judiciously.

The __init__() Function in Python

The __init__() function is a special method in Python classes that is automatically called when an object of that class is created. It's often used to initialize the object's attributes with default or specified values.  

Syntax:

Python

class MyClass:

  def __init__(self, attribute1, attribute2):

    self.attribute1 = attribute1

    self.attribute2 = attribute2

Purpose:

  • Initialization: Sets initial values for object attributes.

  • Customizations: Allows for different object configurations.

  • Data Validation: Can be used to validate input data.

Example:

Python

class Person:

  def __init__(self, name, age):

    self.name = name

    self.age = age

 

person = Person("Alice", 30)

print(person.name)  # Output: Alice

print(person.age)  # Output:   30

Key Points:

  • The __init__() function is automatically called when an object is created.

  • It takes the self parameter as the first argument, which refers to the object itself.

  • You can define any number of parameters in the __init__() function.

  • The __init__() function is often used to set initial values for attributes and perform any necessary setup.

Additional Considerations:

  • You can use default values for parameters in the __init__() function to make the class more flexible.

  • If you need to perform more complex initialization logic, consider using a separate initialization method.

  • The __init__() function is called automatically when an object is created, even if you don't explicitly call it.

By understanding the __init__() function, you can effectively create and initialize objects in Python.

 

Adding Properties to Python Classes

Properties in Python are a way to control access to object attributes, providing a more flexible and encapsulated way to interact with them. They can be used to:

  • Enforce data validation: Ensure that values assigned to attributes meet certain criteria.

  • Provide calculated properties: Derive values from other attributes.

  • Control access to private attributes: Hide internal implementation details.

Using Property Decorators:

Python

class MyClass:

  def __init__(self, value):

    self._value = value  # Private attribute

 

  @property

  def value(self):

    return self._value

 

  @value.setter

  def value(self, new_value):

    if new_value < 0:

      raise ValueError("Value cannot be negative")

    self._value = new_value  

 

 

 

# Example usage:

obj = MyClass(10)

print(obj.value)  # Output: 10

 

obj.value = 20

print(obj.value)  # Output: 20

 

obj.value = -5  # Raises ValueError

Key Points:

  • The @property decorator defines a getter method.

  • The @value.setter decorator defines a setter method.

  • The setter method can implement validation logic or modify the value before assigning it.

  • Private attributes (starting with __) are generally used to hide implementation details.

Additional Considerations:

  • You can use @value.deleter to define a deleter method for removing the property.

  • For simple properties without validation or calculations, you can directly access and modify the attribute without using property decorators.

  • Consider using property decorators when you need to control access, enforce data validation, or derive calculated values.

By understanding properties in Python, you can create more robust and flexible class designs.

Persistent Storage of Objects Polymorphism
Our Products & Services
  • Home
Connect with us
  • Contact us
  • +91 82955 87844
  • Rk6yadav@gmail.com

StudyLover - About us

The Best knowledge for Best people.

Copyright © StudyLover
Powered by Odoo - Create a free website