如何为模型实现声明抽象class和方法?
How to declare abstract class and methods for model implementation?
我想知道 Django 中是否有创建抽象的方法 class 我可以在其中声明应在模型中实现的方法。
通常,在Python中,我们这样声明抽象class:
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
参考this
希望这有帮助。
我想知道 Django 中是否有创建抽象的方法 class 我可以在其中声明应在模型中实现的方法。
通常,在Python中,我们这样声明抽象class:
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
参考this 希望这有帮助。