Crea una classe astratta in Python
- 
          
            Python 3.4+ - Crea una classe astratta in Python ereditando dal modulo ABC
- 
          
            Python 3.0+ - Crea una classe astratta in Python ereditando dal modulo ABCMeta
- Metodo per verificare se una classe è astratta o meno in Python
 
Una classe astratta è una classe ristretta perché non può essere istanziata - non puoi usarla per creare oggetti. Può essere ereditato solo da un’altra classe.
Una classe astratta mira a definire una funzione/comportamento comune che più sottoclassi possono ereditare senza dover implementare l’intera classe astratta.
In Python, possiamo creare una classe astratta basata in diversi modi in base alla versione di Python.
Python 3.4+ - Crea una classe astratta in Python ereditando dal modulo ABC
In Python 3.4, per creare una classe astratta.
- Importare il modulo ABC(classi base astratte).
from abc import ABC, abstractmethod
- Dichiarare il metodo astratto utilizzando il decoratore @abstractmethod.
from abc import ABC, abstractmethod
class ExampleAbstractClass(ABC):
    @abstractmethod
    def abstractmethod(self):
        pass
Di seguito è riportato un esempio in cui la classe astratta Vehicle ha due sottoclassi, ovvero Car e Bike. Le classi Car e Bike hanno la loro implementazione unica.
from abc import ABC, abstractmethod
class Vehicle(ABC):
    @abstractmethod
    def numberofwheels(self):
        pass
class Car(Vehicle):
    def numberofwheels(self):
        print("A Car has 4 wheels")
class Bike(Vehicle):
    def numberofwheels(self):
        print("A Bike has 2 wheels")
C = Car()
C.numberofwheels()
B = Bike()
B.numberofwheels()
Produzione:
A Car has 4 wheels
A Bike has 2 wheels
Python 3.0+ - Crea una classe astratta in Python ereditando dal modulo ABCMeta
In Python 3.0+, per creare una classe astratta.
- Importare il modulo ABCMeta(classi base astratte).
from abc import ABCMeta, abstractmethod
- Dichiarare il metodo astratto utilizzando il decoratore @abstractmethode menzionaremetaclass=ABCMeta.
from abc import ABCMeta, abstractmethod
class Example2AbstractClass(metaclass=ABCMeta):
    @abstractmethod
    def abstractmethod2(self):
        pass
Di seguito è riportato un esempio.
from abc import ABCMeta, abstractmethod
class Vehicle(metaclass=ABCMeta):
    @abstractmethod
    def numberofwheels(self):
        pass
class Car(Vehicle):
    def numberofwheels(self):
        print("A Car has 4 wheels")
class Bike(Vehicle):
    def numberofwheels(self):
        print("A Bike has 2 wheels")
C = Car()
C.numberofwheels()
B = Bike()
B.numberofwheels()
Produzione:
A Car has 4 wheels
A Bike has 2 wheels
Metodo per verificare se una classe è astratta o meno in Python
Per verificare se la classe creata è effettivamente una classe astratta o meno, dovremmo istanziare la classe. Una classe astratta non consentirà l’istanza e genererà un errore.
Ad esempio, se istanziamo un abstract come di seguito.
x = ExampleAbstractClass()
Quindi, viene visualizzato un errore.
Can't instantiate abstract class ExampleAbstractClass with abstract methods abstractmethod