Въведение в наследството в Python

Python, притежаващ мулти-парадигма възможности, очевидно се съобразява с обектно-ориентирания стил на програмиране. И всеки език не може да бъде достатъчно смешен, за да претендира за обектно-ориентирана методология, без да осигури подкрепа за наследяване, включително python. Python осигурява ясно уникален аромат на наследяване, като позволява изключително мощни операции, които не са били виждани досега. Въпреки че идва с някои ограничения, например, в момента сигурността чрез обхват на членовете на класа се постига само чрез конвенция и не е присъща част от езика. Така членовете, обявени за частни, всъщност са достъпни публично с някои модификации.

Синтаксис на класа

Синтаксисът за дефиниране на производен клас, когато един или повече базови класове трябва да бъдат наследени, е както следва:

class derivedClassName(baseClassName(, …)):


Както е показано, производният клас указва разделен със запетая списък от базови класове, които да се наследят от заглавието на дефиницията на класа.

Класна кухня

Нека започнем с дефинирането на базов клас, използван за всички наши примери:

class cuisine():
def __init__(self, type):
self.type = type
returncooked_cuisine = new cuisine('cooked')

Показаната база определя шаблон на обект, използван за дефиниране на кухни и заснемане дали е готвена кухня или не. Освен това има конструктор, използван за приемане на типа кухня. По-късно се създава обект от тип „сварен“.

Видове наследяване в Python

Съществуват главно два вида наследяване, комбинация от които дава всеки друг тип.

1. Единично наследяване: Един базов клас, наследен от един производен клас. Това е най-простият тип наследяване. Също така минимално възможен. Полученият клас автоматично извиква конструктора на базовия клас.

2. Множество наследяване: Множество базови класове, наследени от един производен клас. Конструкторите на базовия клас се извикват в реда, в който са получени класовете.

Получени видове наследяване

Комбинирането на горните две форми на наследяване може да доведе до следните видове наследяване:

1. Йерархично наследяване: Един основен клас, наследен от множество производни класове. Всеки производен клас ще работи независимо, но обектите споделят класните променливи в различни класове.

2. Наследяване на много нива: Производен клас, който служи като базов клас за друг производен клас. В този случай конструкторите на базовия клас се призовават рекурсивно.

3. Хибридно наследяване: Комбинация от множество случаи на гореспоменатите видове наследяване. Това може да доведе до всяка въображаема комбинация от класове.

Примери за наследяване в Python

По-долу са примери за наследяване в Python:

1. Единично наследяване

Нека създадем клас, наречен индийска кухня, който наследява класова кухня.

class indian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnindian_cuisine = new cuisine('cooked', 'India')

Както е показано в нов клас, indian_cusine е създаден, който приема параметър тип и извиква конструктор на базов клас, предавайки параметъра. Освен това създава ново място за променлива на обект . Това се използва само в производен клас и не е видимо за обекти от базовия клас.

2. Йерархично наследяване

Нека създадем клас, наречен ItalianCuisine, който наследява класната кухня:

class italian_cuisine(cuisine):
def __init__(self, type, place):
super().__init__(type)
self.place = place
returnitalian_cuisine = new cuisine('cooked', 'Italy')

Както е показано в нов клас, Italian_cusine е създаден, който приема параметър тип и извиква конструктор на базов клас, предавайки параметъра. Освен това създава ново място за променлива на обект . Това се използва само в производен клас и не е видимо за обекти от базовия клас. Сега, тъй като два класа, indian_cusines и italian_cuisine наследяват клас кухня, има реализирано йерархично наследяване.

3. Множествено наследяване

Нека създадем клас, наречен FineDineCuisine, който наследява от няколко класа.

class fine_dine_cuisine(indian_cuisine, italian_cuisine):
def __init__(self, type, place, portion_size):
super().__init__(type, place)
self.portion_size = portion_size
returnfine_dine_cuisine = new cuisine('cooked', 'India', 4)

Новият клас fine_dine_cuisine, наследява както от indian_cuisine, така и от Italian_cuisine, наследявайки техните параметри. Той приема типа параметри, мястото и размера на частта. тип и място се предават като аргументи за конструктори на базови класове. part_size е нов параметър на обект, който не е споделен с базовите класове.

Бележка за диамантеното наследяване:

Тъй като както индианската кухня, така и италианската кухня наследяват от клас кухня, тя образува класически случай на наследяване на диаманти, където множество екземпляри от базовия клас присъстват пряко / косвено за производен клас. В повечето езици, като c ++, това причинява проблем или се използват абстрактни класове. Python, от друга страна, уточнява, че това е собствено иновативно решение. Той наследява общите методи и атрибути само веднъж, като дава предпочитания на класовете в реда на наследяването. Следователно, тъй като кухнята се наследява два пъти, предпочитанието се дава на индианската кухня кухня, тъй като е наследена първо.

Бележка за членовете на класа:

Всеки атрибут, дефиниран в дефиницията на клас, но не във функция, става атрибут на клас и се споделя във всички инстанции на класа. По този начин, ако един обект промени който и да е от тези атрибути на клас, промените са видими за всички останали инстанции (независимо дали за същия обект клас или производен клас обект). По този начин бъдете внимателни, докато използвате атрибути на клас, които не присъстват в никоя дефиниция на метод.

Заключение - Наследяване в Python

Python отново определи много гъвкав, приспособим и мощен за използване, когато обектно-ориентираната парадигма е предпочитаният маршрут. Това определено е концепция, която всеки може да използва и трябва да има под колан. Тези концепции се използват за формиране на градивните елементи на всеки мащабируем и поддържан софтуер.
С това основно въвеждане в наследяване в python, можете да продължите и да се насочите към твърдения за реални проблеми и да видите колко добър дизайн можете да мислите.

Препоръчителни статии

Това е ръководство за Наследяването в Python. Тук обсъждаме Въведение, Синтаксис и типове Наследяване в Python, заедно с различни примери и неговото прилагане на код. Можете да разгледате и другите ни предложени статии -

    1. Наследяване в Java
    2. Какво е наследството в програмирането?
    3. Наследяване в C #
    4. По-важно в Java
    5. Наследяване в PHP
    6. Деклариране на абстрактния клас в C # с пример