0
在Django中,我想在類級別上實現__getitem__
(所以在下面的示例中,我想做Alpha['a']
)。我發現我需要一個元類:就像它需要在一個類上實現以使它在實例上可訪問一樣,它必須在元類上實現以在類級別上使用它,據我所知。Django __getitem__模型:元類衝突
class AlphaMeta(type):
a = 7
def __getitem__(self, key):
return getattr(self, key)
class Alpha(models.Model):
value = models.CharField(max_length = 64, default = '')
__metaclass__ = AlphaMeta
print Alpha['a']
問題是我得到下面的錯誤。如果Alpha是一個普通的新式班級(class Alpha(object)
),那麼它工作得很好,但對於更復雜的基礎來說,它需要更多。但是,我不會拒絕我想要的東西,因爲我不明白the metaclasses of all it's bases
是什麼。
metaclass conflict: the metaclass of a derived class must be a
(non-strict) subclass of the metaclasses of all it's bases
我對元類很陌生;任何提示都非常感謝!
編輯:示範田在Alpha
而非AlphaMeta
感謝您的回答!那麼,我可能不會走那條路,謝謝你的警告。無論如何,它的工作。我擔心它可能會爲元班提供一張桌子,但它並非如此美妙。 – Mark
爲什麼不把'a = 7'加到'Alpha'然後用'Alpha.a'? –
這是一個簡化的例子:)例如,我比較方便地爲'Model的item.value'稍微方便些。但確實沒有什麼東西是傳統方式完全不可能的。 – Mark