Crea una classe astratta in Python

Najwa Riyaz 30 gennaio 2023
  1. Python 3.4+ - Crea una classe astratta in Python ereditando dal modulo ABC
  2. Python 3.0+ - Crea una classe astratta in Python ereditando dal modulo ABCMeta
  3. Metodo per verificare se una classe è astratta o meno in Python
Crea una classe astratta 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.

  1. Importare il modulo ABC (classi base astratte).
from abc import ABC, abstractmethod
  1. 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.

  1. Importare il modulo ABCMeta (classi base astratte).
from abc import ABCMeta, abstractmethod
  1. Dichiarare il metodo astratto utilizzando il decoratore @abstractmethod e menzionare metaclass=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

Articolo correlato - Python Class