DEV Community

NK1FC
NK1FC

Posted on

1

OOPs In Python

  • It allows users to create objects with their own attributes.
  • Method act as a function that uses some parameter and objects itself or only the object itself to return some value or change the object. ### General format for creating a class

class NameOfClass:  #use camel casing to write the class name.

    def __init__(self, x, y):
        self.x=x
        self.y=y

    def some_method(self):
        pass    

Enter fullscreen mode Exit fullscreen mode

Why use oops?

  • It makes the development and management of projects more manageable.
  • Feature of data hiding.
  • Reusability of code

OOPs concepts

  • Class
  • Object
  • Encapsulation
  • Abstraction
  • Polymorphism
  • Inheritance
  • Constructor
  • Destructor

Class

  • A class is a blueprint that is used to create an object.
  • It creates an object having the same attribute and methods.
class NameOfClass:  #use camel casing to write the class name.

    def __init__(self, x, y):
        self.x=x
        self.y=y

    def some_method(self):
        pass    


Enter fullscreen mode Exit fullscreen mode

Object

  • It is an entity that has a predefined attributes and method.
class Dog:
    def __init__(self, name):
        self.name=name

    def bark(self):
        print(f'{self.name} woof')

newdog=Dog('tom')
newdog.bark() 
#output- It will print 'tom woof'
Enter fullscreen mode Exit fullscreen mode
  • All the objects created using class Dog the object will have an attribute name and a Method named bark().

Constructor

  • This will create object using the class.
  • init is used to create the object.
class Dog:
    def __init__(self, name):
        self.name=name


newdog=Dog('tom') # New object is constructed with attribute name tom.
Enter fullscreen mode Exit fullscreen mode

Destructor

  • It is used to delete the object.
  • It uses del Keyword.
class Dog:
    def __init__(self, name):
        self.name=name


newdog=Dog('tom') # New object is constructed with attribute name tom.
del newdog # the object new dog will be deleted.
Enter fullscreen mode Exit fullscreen mode

Encapsulation

  • Encapsulation allows us to hide the object's attributes and method from outside access.
  • Python doesn't have truly private or protected attributes and methods.
  • Attributes and methods that needed to be protected start with single underscore: _
  • Attributes and methods that needed to be private start with double underscore: __
class Person:

    def __init__(self, name, age):
        self.__name = name      # private attribute
        self._age = age         # protected attribute

    def get(self):         # This method is used to get the name that is private.
        return self.__name

    def set(self, name):   # This method will take some input names and change the value of the attribute.
        self.__name = name

    def get_age(self):          # This method is used to get the age that is protected.
        return self._age

    def set_age(self, age):     # This method will take some input age and change the value of the attribute.
        self._age = age

    def __show(self):           # private method
        return f"My name is {self.__name} and I am {self._age} years old."

    def _speak(self):           # protected method
        return f"My name is {self.__name}"

a=Person('Name',5)
print(a._Person__name) # accesing private variable it gives output Name
print(a._age) # acessing private variable it gives output age

a._Person__name='New Name' # change the private variable without using any method.
print(a.get_name())  # it return the name of object

Enter fullscreen mode Exit fullscreen mode

Inheritance

  • Inheritance allows us to create a new class(Child class or derived class) based on another class(Parent class or base class).
  • The child class inherits all the attributes and methods of the parent class.
  • In addition, the child class it's own unique attributes and methods.
  • There are several types of inheritance:
    • Single Inheritance: Child class is derived using only one class.
    • Multiple Inheritance: Child class is derived using more than one class.
    • Multilevel Inheritance: In this child, class is inherited from the child class of another parent class
    • Hierarchical Inheritance: Multiple child class is created using single parent class.
    • Hybrid Inheritance: Inheritance of multiple types takes place
class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def show(self):
        print(f'My name is {self.name}, and I am {self.age} years old.')

class NewPerson(Person):                        # inheriting parent class in child class

    def speak(self):                # accessing parent class attribute.
        print("I am new person")

class AnotherPerson(Person):                        # inheriting parent class in child class

    def __init__(self, name, age, sport):
        super().__init__(name, age)     # accessing parent class attribute in child class using super and changing the
        self.sport = sport              # child class attribute 

    def speak(self):
        print(f'My favorite sport is {self.sport}.')

D = AnotherPerson("Bruno", 9, 'Football')
C = NewPerson("Missa", 6)

D.show()                    # accessing parent class method in child class
#output- My name is Bruno, and I am 9 years old.
D.speak()                   # child class accessing its own attributes
#output- My favorite sport is Football. 
C.show()                    # accessing parent class method in child class
#output- My name is Missa, and I am 6 years old.                        
C.speak()                   # child class accessing its own attributes
#output- I am new Person            
Enter fullscreen mode Exit fullscreen mode

Abstraction

  • Abstraction allows us to hide classes and methods not necessary for the user.
  • An abstract class in python can be made by setting the parent class of any class to ABC after importing it from abc (Abstract Class Bases).
  • If you need to create an abstract method also import abstractmethod from abc module.
  • After that, we can create an abstract method using the @abstractmethod decorator.
from abc import ABC, abstractmethod

class Person(ABC):          # create an abstract class
    @abstractmethod     # create an abstract method
    def speak(self):
        pass

    def show(self):
        print("I am a Person.")

class AnotherPerson(Person):

    def speak(self):
        print("I am another person")


bruno = AnotherPerson()         
bruno.speak()           # ignoring abstract method of abstract class
#output- I am another person
bruno.show()            # non-abstract method of the abstract class still works
#output- I am a Person
person= Person() #this will throw an error abstract class can't be instantiated.        
Enter fullscreen mode Exit fullscreen mode

Polymorphism

  • It simply refers that different classes can have the same method name and it also represents method overriding.
  • Polymorphism in Python can be achieved in two ways: method overriding and duck-typing.

A. Method Over-riding

Method overriding allows a child class to have a different definition of a method already defined in the parent class.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(f'My name is {self.name} and I am {self.age} years old.')

class NewPerson(Person):
    pass

class AnotherPerson(Person):

    def speak(self):                # over-riding method of parent's class
        print(f'Hello! My name is {self.name} and I am {self.age} years old.')

nemo = Person("Nemo", 2)
bruno = AnotherPerson("Bruno", 9)

nemo.speak()                        # parent's class method runs
#output- My name is Nemo and I am 2 years old.
bruno.speak()                       # child's class method runs
#output- Hello! My name is Bruno and I am 9 years old.
Enter fullscreen mode Exit fullscreen mode

B. Duck Typing

Duck Typing allows different types of classes to have the same method name with its own definition.

class Person:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):                # method of first class
        print(f'My name is {self.name} and I am {self.age} years old.')

class AnotherPerson:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):                # method of second class with same name
        print(f'Hello! My name is {self.name} and I am {self.age} years old')

nemo =Person("Nemo", 2)
bruno = Another("Bruno", 9)

nemo.speak()                        # method of first-class runs
# output- My name is Nemo and I am 2 years old.
bruno.speak()                       # method of the second class with the same name runs
#output- Hello! My name is Bruno and I am 9 years old.
Enter fullscreen mode Exit fullscreen mode

Dunder/Magic Methods:

  • Dunder or magic methods are special methods used in Python classes.
  • They are used to define how objects of classes behave in case they are used with in-built Python operations.
  • Some commonly used dunder methods are init,(self,...), str(self), len(self), etc.
  • Dunder methods cannot be called, they run automatically when called by in-built python functions.
class Book:
    def __init__(self,title,author,page):
        self.title=title
        self.author=author
        self.page=page

    def __str__(self):
        return f'This {self.title} wrote by {self.author}'

    def __len__(self):
        return self.page

kid_book=Book('New Book', 'Myself', 15)

print(kid_book)
#output- This Newbook wrote by Myself
print(len(kid_book))
#output- 15
Enter fullscreen mode Exit fullscreen mode

References

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more