首页 > 解决方案 > 如何声明模型实现的抽象类和方法?

问题描述

我想知道 Django 中是否有一种方法可以创建一个抽象类,我可以在其中声明一个应该在模型中实现的方法。

通常,在 Python 中,我们像这样声明抽象类:

import abc

class MyABC(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def do_something(self, value):
        raise NotImplementedError

然后像这样实现它:

class MyClass(MyABC):

    def do_something(self, value):
        pass

我对 django 所做的是:

import abc
from django.db import models

class MyClass(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def __str__(self):
        raise NotImplementedError

class MyClass2(models.Model, MyClass):

    def __str__(self):
        pass

但这给了我错误:

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

我不明白我在这里做错了什么。MyClass2应该继承自MyClass和自models.Model

我做错了什么?为什么这是错误的?声明应该在模型中实现的方法的更好方法是什么?

标签: pythondjangodjango-modelsmetaclassabstract-methods

解决方案


对于 django 模型,你可以试试这个。

从 django.db 导入模型

class MyClass(models.Model):

   class Meta:
      abstract = True
   def __str__(self):
      raise NotImplementedError

class MyClass2(MyClass):

   def __str__(self):
       pass

参考这个 希望这会有所帮助。


推荐阅读