Erzwinge die untergeordnete Klasse, um die Methoden des übergeordneten Elements zu überschreiben

8

Angenommen, ich habe eine Basisklasse mit nicht implementierten Methoden wie folgt:

%Vor%

Nehmen wir nun an, einer meiner Kollegen verwendet die Polygon-Klasse, um eine Unterklasse wie folgt zu erstellen:

%Vor%

(H / Sh) e hat vergessen, die Methode area () zu implementieren.

Wie kann ich die Unterklasse zwingen, die Methode area () des Elterns zu implementieren?

    
Aditya Barve 15.06.2017, 20:08
quelle

3 Antworten

17

Dies könnte Ihre Elternklasse sein:

%Vor%

obwohl das Problem nur zur Laufzeit erkannt wird, wenn eine der Instanzen der untergeordneten Klassen versucht, eine dieser Methoden aufzurufen.

Eine andere Version ist abc.abstractmethod .

%Vor%

Sie können Circle nicht instanziieren, ohne dass alle Methoden implementiert sind.

Dies ist die python 3 -Syntax; in python 2 müssten Sie

%Vor%

Beachten Sie auch, dass es für die binären Sonderfunktionen __eq__(), __lt__(), __add__(), ... besser ist, return NotImplemented anstatt% co_de zu erhöhen %.

    
hiro protagonist 15.06.2017, 20:12
quelle
2

Genau das ist NotImplementedError für:)

In Ihrer Basisklasse

%Vor%     
Ding 15.06.2017 20:11
quelle
2

Sie können die NotImplementedError Ausnahme in der Basisklassenmethode auslösen.

%Vor%

Sie können auch @abc.abstractmethod verwenden, aber dann müssen Sie die Metaklasse deklarieren abc.ABCMeta zu sein, was Ihre Klasse abstrakt machen würde. Weitere Informationen zum Modul abc

    
vishes_shell 15.06.2017 20:11
quelle