Наследование:

Хотя объектно-ориентированное программирование полезно как инструмент моделирования, оно становится по-настоящему мощным, когда вводится понятие наследования. Наследование — это процесс, посредством которого «дочерний» класс наследует данные и поведение «родительского» класса. Здесь нам определенно поможет пример.

Теперь давайте создадим класс с именем «Животное» со следующими методами:

  1. кто я
  2. есть
class Animal:
    def __init__(self):
        print("Animal created")
    def whoAmI(self):
        print("Animal")
    def eat(self):
        print("Eating")
class Dog(Animal):
    def __init__(self):
        Animal.__init__(self)
        print("Dog created")
    def whoAmI(self):
        print("Dog")
    def bark(self):
        print("Woof!")
--------------------------------------------
d = Dog()
Output: 
Animal created
Dog created
d.whoAmI()
Output:
Dog
d.eat()
Output:
Eating
d.bark()
Output:
Woof!

В этом примере у нас есть два класса: Animal и Dog. Animal — это базовый класс, Dog — производный класс.

Производный класс наследует функциональность базового класса.

  • Это показано методом eat().

Производный класс изменяет существующее поведение базового класса.

  • показано методом whoAmI().

Наконец, производный класс расширяет функциональность базового класса, определяя новый метод bark().

Важными преимуществами наследования являются повторное использование кода и снижение сложности программы. Производные классы (потомки) могут переопределять или расширять функциональные возможности базовых классов (предков).

Полиморфизм:

Полиморфизм просто означает наличие множества форм, и здесь разные классы объектов могут использовать одно и то же имя метода, и эти методы могут вызываться из одного и того же места, даже если могут быть переданы различные объекты.

Давайте разберемся на простом примере:

class Dog:
    def __init__(self, name):
        self.name = name
    def speak(self):
        return self.name+' says Woof!'
    
class Cat:
    def __init__(self, name):
        self.name = name
    def speak(self):
        return self.name+' says Meow!' 
    
niko = Dog('Niko')
felix = Cat('Felix')

print(niko.speak())
print(felix.speak())
Output:
Niko says Woof!
Felix says Meow!

Здесь у нас есть класс Dog и класс Cat, и у каждого есть метод .speak(). При вызове метод .speak() каждого объекта возвращает результат, уникальный для объекта.

Существует несколько различных способов демонстрации полиморфизма. Во-первых, с циклом for:

class India():
    def capital(self):
        print("New Delhi is the capital of India.")
        
    def language(self):
        print("Hindi is the most widely spoken language of India.")
class USA():
    def capital(self):
        print("Washington, D.C. is the capital of USA.")
    def language(self):
        print("English is the primary language of USA.")
obj_ind = India()
obj_usa = USA()
for country in (obj_ind, obj_usa):
    print(country.capital())
    print(country.language())
Output:
New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
Washington, D.C. is the capital of USA.
English is the primary language of USA.

Другой с функциями:

def func(obj):
   obj.capital()
   obj.language()
obj_ind = India()
obj_usa = USA()
func(obj_ind)
func(obj_usa)
Output:
New Delhi is the capital of India.
Hindi is the most widely spoken language of India.
Washington, D.C. is the capital of USA.
English is the primary language of USA.

В обоих случаях мы могли передавать разные типы объектов и получать специфичные для объекта результаты с помощью одного и того же механизма.

Вывод:

Объектно-ориентированное программирование может быть очень сложным в начале, но если его правильно понять, мы можем найти его действительно полезным, поскольку оно позволяет нам повторно использовать код и определять структуры для обеспечения согласованности.

Надеюсь, вы все найдете его полезным…

Ссылка на часть I: https://medium.com/@ktirupati82/improve-your-python-programming-all-about-classes-and-objects-part-1-62074e5de439

Использованная литература:

https://www.udemy.com/course/complete-python-bootcamp/learn/lecture/9478312#overview

https://jeffknupp.com/blog/2014/06/18/improve-your-python-python-classes-and-object-Oriented-programming

https://www.geeksforgeeks.org/polymorphism-in-python/?ref=lbp