【发布时间】:2012-12-13 08:44:38
【问题描述】:
在 Django 中,我想在类级别实现__getitem__(所以在下面的示例中,我想做Alpha['a'])。我发现我需要一个元类:就像它需要在类上实现以使其在实例上可访问一样,它必须在元类上实现才能在类级别上使用它,据我所知。
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
【问题讨论】:
标签: python django metaclass magic-methods