Přehled abstraktní třídy v Pythonu

Abstraktní třídy jsou třídy, které jsou deklarovány, ale neobsahují žádné implementace. Může to být jen zděděno. Abstraktní třídy fungují jako šablona pro podtřídy. Abstraktní třídy nelze konkretizovat a vyžadují podtřídy pro implementaci abstraktních metod. Potřebuje podtřídy pro implementaci abstraktních metod, které jsou definovány v abstraktní třídě. Abstraktní třídy obsahují jednu nebo více abstraktních metod. Abstraktní metody jsou metody, které jsou deklarovány bez implementací. Nemůžeme přímo vytvořit objekt abstraktní třídy, ale můžeme zdědit základní třídu a poté objekt vytvořit. V tomto tématu se budeme učit o abstraktní třídě v Pythonu.

Jak abstraktní, tak i konkrétní třída mohou být obsaženy ve třídě Abstraktní. Použitím abstraktní třídy můžeme definovat zobecněnou strukturu metod bez poskytnutí úplných implementací každé metody. Abstraktní metody, které jsou definovány v abstraktní třídě, obecně nemají tělo, ale je možné mít abstraktní metody s implementacemi v abstraktní třídě a pokud se z takové abstraktní třídy získává jakákoli podtřída, musí zajistit implementaci takových metod. . Pokud žádná odvozená třída není implementována odvozenou třídou, pak vyvolá chybu. Objekt abstraktní třídy nelze přímo vytvořit, ale když pomocí této abstraktní třídy poskytujeme určité funkce základní třídě nebo podřízené třídě, může to udělat vytvořením objektu základní třídy.

Význam abstraktních tříd

1. Poskytuje výchozí funkce základních tříd.

2. Definuje společné API pro sadu podtříd, užitečné, pokud třetí strana poskytuje pluginy v aplikaci.

3. Užitečný ve velkém kódu si pamatoval, že mnoho tříd je obtížné.

Syntax

From abc import ABC
Class Educba(ABC):

Chcete-li považovat jakoukoli třídu za abstraktní třídu, musí zdědit ABC metaclass od python zabudovaného abc modulu. modul abc importuje metaclass ABC.

Abstraktní metody v Pythonu

Abstraktní metody jsou metody, které jsou deklarovány bez implementací.

Syntax

from abc import ABC, abstract method
Class Educba(ABC):
@abstractmethod
def mymethod(self):
#empty body
pass

Chcete-li definovat abstraktní metody v abstraktní třídě, musí být metoda ozdobena klíčovým slovem s názvem @abstractmethod decorator. Dekorátor @abstractmethod musí být importován z vestavěné knihovny pythonu zvané abc.

Jak fungovaly abstraktní třídy v Pythonu?

Python nemá ve výchozím nastavení abstraktní třídy, ale má modul nebo knihovnu, která tvoří základ pro definování tříd ABC (Abstract Base Class) a tento název modulu se nazývá ABC. Označuje metodu základní třídy jako abstraktní základní třídu a poté vytváří konkrétní třídy jako implementace abstraktní základny. Metoda se změní na abstraktní metodu pomocí klíčového slova dekorátora nazvaného @abstractmethod.

ABC modul se používá k vytvoření abstraktních tříd, @ abstractmethod je dekoratér používaný k deklaraci metody abstrakt. Modul ABC uzavírá smlouvu mezi základní třídou a konkrétní třídou.

Modul abc poskytuje základ pro definování abstraktních základních tříd (ABC) v Pythonu. Modul kolekce má některé konkrétní třídy, které jsou odvozeny od ABC a lze je dále rozdělit. Kromě všech těchto modulů kolekce také obsahuje některé ABC, které lze použít k testování, zda třída nebo instance poskytuje určité rozhraní nebo ne.

Tento modul poskytuje následující třídu:

třída abc.ABCMeta

Metaclass se používá pro definování abstraktní základní třídy (ABC)

Používáme metaclass k vytvoření abstraktní základní třídy.

from abc import ABCMeta
class C:
__metaclass__ = ABCMeta
MyABC.register(tuple)
assert issubclass(tuple, C)
assert isinstance((), C)

Příklad

# importing the ABC module
from abc import ABC, abstractmethod
class Shape(ABC):
def common(self):
print("This is a concrete method")
@abstractmethod # decorator
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
class Square(Shape):
def __init__(self, side):
self.__side=side
def area(self):
return self.__side*self.__side
def perimeter(self):
return 4*self.__side
class Rectangle(Shape):
def __init__(self, length, breath):
self.__length=length
self.__breath=breath
def area(self):
return self.__length*self.__breath
def perimeter(self):
return 2*(self.__length+self.__breath)
S1=Square(4)
print(S1.common())
print(S1.area())
print(S1.perimeter())
R1=Rectangle(2, 4)
print(R1.common())
print(R1.area())
print(R1.perimeter())

Výstup byl získán

Toto je konkrétní metoda

16

16

Toto je konkrétní metoda

8

12

Ve výše uvedeném příkladu je třídou Abstrakt Tvar, který obsahuje jednu konkrétní metodu zvanou obyčejná a dvě abstraktní metody zvané oblast a obvod. Existují dvě podřízené třídy Classes a Rectangle, které zdědí abstraktní třídu Shape a implementují abstraktní metodu.

Implementace pomocí podtříd:

import abc
class Shape:
def area(self):
pass
class Square(Shape):
def area(self):
print("Square is a child class")
print( issubclass(Square, Shape))
print( isinstance(Square(), Shape))

Abstraktní vlastnosti

Abstraktní třídy obsahují abstraktní vlastnosti spolu s abstraktními metodami definovanými v @abstractproperty.

Nyní můžeme s abstraktními třídami použít vlastnost property.getter (), property.setter () a property.deleter ().

Syntax

class class_name(ABC):
@property
@abstractmethod
Def method(self):

To definuje vlastnost jen pro čtení.

class Class_name:
__metaclass__ = ABCMeta
def getx(self): …
def setx(self, value): …
x = abstractproperty(getx, setx)

Python 2

class C(ABC):
@abstractproperty
def my_abstract_property(self):

Python 3.3

class C(ABC):
@property
@abstractmethod
def my_abstract_property(self):
import abc
from abc import ABC, abstractmethod
class Shape(ABC):
@abc.abstractproperty
def area(self):
return "Shape class"
class Square(parent):
@property
def area(self):
return "Square class"
try:
s1 =Shape()
print( s1.area)
except for Exception as err:
print (err)
s1 = Square()
print (s1.area)

Výstup:

Nelze vytvořit instanci abstraktní třídy Tvar s oblastí abstraktní metody

Čtvercová třída

Závěr

Nakonec jsem dospěl k závěru, že abstraktní třída je způsob, jak zajistit určitou úroveň kvality kódu, protože vynucuje určité standardy a může snížit množství duplicitního kódu, který píšeme. Vytváří spojení mezi základní třídou a konkrétní třídou. Poskytuje snadnou implementaci kódu. Definuje zobecněnou strukturu metod bez její úplné implementace. Život programátora usnadňuje tím, že abstraktuje proces pozadí a nutí je soustředit se pouze na důležité body. Díky výzkumu běžné a jednoduché struktury tříd v kódu je výzkum a srozumitelnost mnohem rychlejší.

Doporučené články

Toto je průvodce abstraktní třídou v Pythonu. Zde diskutujeme o tom, jak abstraktní třídy fungují v Pythonu s významem a metodami s vhodnými příklady. Další informace naleznete také v následujících článcích -

  1. Operace se soubory Python
  2. Zapouzdření v Pythonu
  3. Smyčky v Pythonu
  4. Konstruktor v Pythonu
  5. Pythonovy sady
  6. Úvod do abstraktní třídy v PHP

Kategorie: