Me preguntaba si es posible al crear una clase abstracta con métodos abstractos si es posible permitir que las implementaciones de esos métodos en las clases derivadas tengan diferentes cantidades de parámetros para cada función.
Actualmente tengo para mi clase abstracta
from abc import ABCMeta, abstractmethod class View(metaclass=ABCMeta): @abstractmethod def set(self): pass @abstractmethod def get(self): pass Pero quiero poder implementarlo en una clase con set que tiene 1 parámetro y tener 2 ( set(param1) y get(param1, param2) ), y luego en otra clase también heredar pero tener 0 parámetros para set y 2 para get ( set() y get(param1, param2) ).
¿Es esto posible y, de ser así, cómo lo haría?
No se realizan comprobaciones sobre cuántos argumentos toman las implementaciones concretas. Así que no hay nada que te impida hacer esto ya.
Simplemente defina esos métodos para tomar cualquier parámetro que necesite aceptar:
class View(metaclass=ABCMeta): @abstractmethod def set(self): pass @abstractmethod def get(self): pass class ConcreteView1(View): def set(self, param1): # implemenation def get(self, param1, param2): # implemenation class ConcreteView2(View): def set(self): # implemenation def get(self, param1, param2): # implemenationpitón 3.8
from abc import ABC, abstractmethod class SomeAbstractClass(ABC): @abstractmethod def get(self, *args, **kwargs): """ Returns smth """ @abstractmethod def set(self, key, value): """ Sets smth """ class Implementation(SomeAbstractClass): def set(self, key, value): pass def get(self, some_var, another_one): passFunciona perfectamente, sin avisos, sin problemas.