Is it possible to force a child class to have all the methods of the abstract class?
I have the following example:
class MovementsService(ABC):
@abstractmethod
def run():
pass
and the child class:
class People(MovementsService):
def run():
print("im running")
def move():
print("im moving")
but I wouldn't want the child class "People" to have the possibility to implement functions that it doesn't have in the abstract class. Is this possible?
I don't know if this is a good practice either, so I am open to hear opposing opinions.
but in my case it would make sense to block the ability to create new functions because I am using the abstract class as an "interface" to one of my project's dependencies...
You can use
__init_subclass__to detect unexpected attributes in a subclass (at least, those appearing in the class's__dict__attribute). I'm not really sure why this would be necessary, though.You can refine the check to only disallow callable attributes, only attributes of type
function(allowing class methods and static methods), etc.