我定义了一个基础抽象模型类,它为模型提供了一些额外的功能,如下所示:

class BaseModel(models.Model):
    # ... some fields and methods
    class Meta:
        abstract = True

class Model1(BaseModel):
    # ... some fields and methods
    def required_method(self, *args, *kwargs):
        # implementation

class Model2(BaseModel):
    # ... some fields and methods


现在,我需要确保每个派生类都定义了许多必需的方法。如果未定义它们,我需要在manage.py尝试执行时抛出异常。因此,换句话说,BaseModel应该要求每个派生类定义一些接口,这些接口是该BaseModel使用的,而不是自己定义的。

我应该在哪里进行检查? __init__BaseModel是检查此内容的好地方吗?

编辑:这样做的目的只是为了安全。如果一段时间后有人尝试从BaseModel类继承,但忘记实现必需的方法,则该代码仍将运行,直到BaseModel代码尝试执行任何缺少的方法。因此对我来说可能有危险。最好防止执行此类代码。我相信Java具有称为interfaces的机制。我想在Python中做类似的事情。

最佳答案

使用abc包中的装饰器来标记哪些方法应该是抽象的。该包裹将为您做好检查工作,因此您甚至不必担心检查支票的正确位置;-)

10-08 03:49