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