【发布时间】:2018-10-09 16:07:44
【问题描述】:
我正在尝试使用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
我已阅读以下帖子:
Using ABC, PolymorphicModel, django-models gives metaclass conflict
我已经尝试了这些解决方案的许多变体,但我仍然遇到可怕的metaclass 异常。帮助我欧比旺克诺比,你是我唯一的希望。 :-)
【问题讨论】:
-
我重新写了我的问题,因为在收到我的问题格式不正确的反馈后,我重新阅读了它。甚至我也很难理解自己的问题!一定是在我因编码过多而眼花缭乱时写的。大声笑
标签: python-3.x django-models abc