python - 如何声明模型实现的抽象类和方法?
问题描述
我想知道 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
。
我做错了什么?为什么这是错误的?声明应该在模型中实现的方法的更好方法是什么?
解决方案
对于 django 模型,你可以试试这个。
从 django.db 导入模型
class MyClass(models.Model):
class Meta:
abstract = True
def __str__(self):
raise NotImplementedError
class MyClass2(MyClass):
def __str__(self):
pass
参考这个 希望这会有所帮助。
推荐阅读
- javascript - mark.js - 使准确性参数成为一个函数
- dns - 如何找到DNS流量的源头进程?
- reactjs - Redux:缺少分号;出现奇怪的语法错误
- reactjs - 有人帮助 React Native Video Compression 吗?
- reactjs - 如何使用react-app-rewired在react app中运行cypress?
- presto - presto 查询以通过正则表达式模式检索表
- typescript - 为什么在 TypeScript 中通过 const 传递属性类型 unassignalbe?
- python - selenium 隐藏 chromdriver 控制台窗口
- python - 使用 Python 将 PDF 文件拖放到 word 文档中
- javascript - SVG 动画不填充 Safari 中的容器