["python","inheritance","overriding"]
Force child class to override parent's methods

Suppose I have a base class with unimplemented methods as follows: class Polygon(): def __init__(self): pass def perimeter(self): pass def area(self): pass Now, let's say one of my colleagues uses the Polygon class to create a subclass as follows: import math class Circle(Polygon): def __init__(self, radius): self.radius = radius def perimeter(self): return 2 * math.pi * self.radius (H/Sh)e has forgotten to implement the area() method. How can I force the subclass to implement the parent's area() method?
this could be your parent class: class Polygon(): def __init__(self): raise NotImplementedError def perimeter(self): raise NotImplementedError def area(self): raise NotImplementedError although the problem will be spotted at runtime only, when one of the instances of the child classes tries to call one of these methods. a different version is to use abc.abstractmethod. from abc import ABC, abstractmethod import math class Polygon(ABC): @abstractmethod def __init__(self): pass @abstractmethod def perimeter(self): pass @abstractmethod def area(self): pass class Circle(Polygon): def __init__(self, radius): self.radius = radius def perimeter(self): return 2 * math.pi * self.radius # def area(self): # return math.pi * self.radius**2 c = Circle(9.0) # TypeError: Can't instantiate abstract class Circle # with abstract methods area you will not be able to instantiate a Circle without it having all the methods implemented. this is the python 3 syntax; in python 2 you'd need to class Polygon(object): __metaclass__ = ABCMeta also note that for the binary special functions __eq__(), __lt__(), __add__(), ... it is better to return NotImplemented instead of raising NotImplementedError.