如何声明模型实现的抽象类和方法? [复制]
Posted
技术标签:
【中文标题】如何声明模型实现的抽象类和方法? [复制]【英文标题】:How to declare abstract class and methods for model implementation? [duplicate] 【发布时间】: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
。
我做错了什么?为什么这是错误的?声明应该在模型中实现的方法的更好方法是什么?
【问题讨论】:
也许,这个链接会帮助你***.com/a/16838663/7320045 【参考方案1】:对于 django 模型你可以试试这个。
从 django.db 导入模型
class MyClass(models.Model):
class Meta:
abstract = True
def __str__(self):
raise NotImplementedError
class MyClass2(MyClass):
def __str__(self):
pass
请参考this 希望这会有所帮助。
【讨论】:
我读了几次这个页面,但是文档没有提到方法。无论如何,这对我有用。谢谢!也许 Django 文档应该有一个关于如何做到这一点的例子。 @macieyn 基本上文档只是明确了概念,这足以理解。 :-) 也许我的英语没有我想的那么好。非常感谢!以上是关于如何声明模型实现的抽象类和方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章