【发布时间】:2020-06-25 06:50:16
【问题描述】:
我想知道 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。
我做错了什么?为什么这是错误的?声明应该在模型中实现的方法的更好方法是什么?
【问题讨论】:
-
也许,这个链接会帮助你stackoverflow.com/a/16838663/7320045
标签: python django django-models metaclass abstract-methods