Модель django, которая является подклассом abc, дает конфликт метакласса

У меня есть следующая модель и абстрактный базовый класс

import abc
from django.db import models


class AbstractBase():
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    def my_method(self):
        return


class MyModel(models.Model, AbstractBase):
    @abc.abstractmethod
    def my_method(self):
        return 1

Но я получаю следующее ошибка.

конфликт метакласса: метакласс производного класса должен быть (нестрогий) подкласс метаклассов всех его баз

Я думаю, что проблема здесь (Как описано здесь http: //code.activestate.com / recipes / 204197-resolve-the-metaclass-conflict / ), что два базовых класса имеют два разных метакласса, поэтому python не может решить, какой метакласс использовать для дочернего объекта.

Чтобы решить эту проблему, я удалил множественное наследование и использовал следующий метод регистрации для регистрации дочернего класса

abc.register(Child)

Но мне этот подход не очень понравился, поскольку он похож на исправление обезьяны.

Есть ли другой способ решить эту проблему?

Я пытаюсь явно назначить метакласс модели для Child, но это не сработало. Я не ищу способ решить эту проблему написанием кода. Я думаю, что это нужно решить, изменив структуру моего класса.

13
задан yilmazhuseyin 4 January 2012 в 07:52
поделиться