![](/img/trans.png)
[英]Using ABC, PolymorphicModel, django-models gives metaclass conflict
[英]A django model that subclasses an abc, gives a metaclass conflict
我有一個以下模型和抽象基類
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-solving-the-metaclass-conflict/ )兩個基類有兩個不同的元類,所以python無法決定哪個元類到用於子對象。
為了解決這個問題,我刪除了多個繼承並使用以下寄存器方法來注冊子類
abc.register(Child)
但我真的不喜歡這種方法,因為它看起來像猴子修補。
有沒有其他方法可以解決這個問題?
我嘗試明確地將模型元類分配給Child,但它不起作用。 我不是在尋找通過編寫代碼來解決它的方法。 我認為這必須通過改變我的類結構來解決。
除了建立一個新的元類是來自繼承ABCMeta
和ModelBase
, 或使 你無能為力。 ABCMeta
繼承ModelBase
,
但是,可能有不同的注冊模式可能是合適的嗎? 也許像 還是班級裝飾師? 或contrib.admin.autodiscover
? .py
文件底部的循環,它調用相應類的register
(例如, for var in globals().values(): if isinstance(var, type) and issubclass(var, AbastractBase): register(var)
)?
編輯 :D'哦。 我認為ABCMeta
就是一個例子,而不是ABCMeta
。 這就是我在太少睡眠時瀏覽StackOverflow所得到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.