我正在尝试使用Python 3实现一个Django数据模型类,它也是一个接口类。我这样做的原因是,我正在为我的同事编写一个基类,并且需要他全部实现三个方法他从我的课程中派生出来的。我试图为他提供一种简化的方式来使用我设计的系统的功能。但是,他必须重写一些方法来为系统提供足够的信息来执行他继承的类中的代码。
我知道这是错误的,因为它会引发异常,但我想要一个像下面的示例这样的类:
from django.db import models
from abc import ABC, abstractmethod
class AlgorithmTemplate(ABC, models.Model):
name = models.CharField(max_length=32)
@abstractmethod
def data_subscriptions(self):
"""
This method returns a list of topics this class will subscribe to using websockets
NOTE: This method MUST be overriden!
:rtype: list
"""
我知道我可以避免继承ABC
类,但我想使用它,因为我不会在这里让你感到厌烦。
问题
将一个类(如上面的类)包含到我的项目中并运行后python manage.py makemigrations
我收到错误:TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
。我搜索了 Stack Overflow,但只找到了如下解决方案:
class M_A(type): pass
class M_B(type): pass
class A(metaclass=M_A): pass
class B(metaclass=M_B): pass
class M_C(M_A, M_B): pass
class C:(A, B, metaclass=M_C): pass
我已阅读以下帖子:
使用 ABC、PolymorphicModel、django-models 会导致元类冲突 https://stackoverflow.com/questions/47319836/using-abc-polymorphicmodel-django-models-gives-metaclass-conflict
解决元类冲突 https://stackoverflow.com/questions/11276037/python-3-typeerror-metaclass-conflict-the-metaclass-of-a-derived-class-must-b
我已经尝试了这些解决方案的许多变体,但我仍然遇到了可怕的问题metaclass
例外。帮助我,欧比旺·克诺比,你是我唯一的希望。 :-)