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
@abstractmethod
e 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