在Django中的抽象父模型类中实现所需的接口

时间:2012-07-18 13:10:48

标签: python django model

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

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__的{​​{1}}是检查此内容的好地方吗?

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

1 个答案:

答案 0 :(得分:2)

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