Используйте __init_subclass__ для проверки реализации - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть проект, в котором у меня есть базовый класс и несколько производных классов.На самом деле, чтобы убедиться, что я не забываю ничего, что я хочу реализовать, вместо того, чтобы проверять реализацию метода.Мне интересно, имеет ли это смысл, и есть ли потенциальные конфликты с наследованием.

class Base:
    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__()
        for prop in ['prop_to_check']:  # extend this list for additional properties to check
            if not hasattr(cls, prop):
                raise NotImplementedError(f'{prop} is not implemented on {cls.__name__}')

class Derived(Base):
    prop_to_check = 3
    pass

class Derived2(Base):
    pass

Derived() 
Derived2()

Приветствия Фабиан

1 Ответ

1 голос
/ 10 апреля 2019

Единственным недостатком является удобочитаемость. Чтобы создать подкласс вашего класса, нужно прочитать (и понять) функцию __init_subclass. С другой стороны, вы могли бы просто написать

class Base(abc.ABC):

   @abc.abstractproperty
   def x(self):
       """children MUST implement this"""
...