使用__init_subclass__进行实现检查

时间:2019-04-10 10:42:47

标签: python init metaclass

我有一个项目,其中有一个基类和一堆派生类。实际上,主要是为了确保我不会忘记要实施某种方法实现检查的任何内容。我想知道这是否有意义,以及与继承是否存在任何潜在冲突。

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 个答案:

答案 0 :(得分:1)

唯一的缺点是可读性。要对您的类进行子类化,必须阅读(并理解)__init_subclass函数。另一方面,您可以只写

class Base(abc.ABC):

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