mardi 17 mars 2020

Best way to implement abstract classes in Python

What is the best way to implement abstract classes in Python?

This is the main approach I have seen:

class A(ABC):
    @abstractmethod
    def foo(self):
        pass

However, it does not prevent from calling the abstract method when you extend that class.

In Java you get an error if you try to do something similar, but not in Python:

class B(A):
    def foo(self):
        super().foo()
B().foo() # does not raise an error

In order to replicate the same Java's behaviour, you could adopt this approach:

class A(ABC):
    @abstractmethod
    def foo(self):
        raise NotImplementedError

However, in practice I have rarely seen this latter solution, even if is apparently the most correct one. Is there a specific reason to prefer the first approach rather than the second one ?

Aucun commentaire:

Enregistrer un commentaire