【发布时间】:2014-06-03 11:13:19
【问题描述】:
所以我基本上创建了一个字典类,它使用类方法来处理它的所有魔术方法,如下所示:
class ClassDict(object):
_items = {}
@classmethod
def __getitem__(cls, key):
return cls._items[key]
@classmethod
def __setitem__(cls, key, val):
cls._items[key] = val
@classmethod
def __len__(cls):
return len(cls._items)
@classmethod
def __delitem__(cls, key):
cls._items.__delitem__(key)
@classmethod
def __iter__(cls):
return iter(cls._items)
所以当我尝试为它分配一个项目时:
ClassDict['item'] = 'test'
我收到一条错误消息 TypeError: 'type' object does not support item assignment,但如果我调用实际方法,__setitem__ 就可以正常工作:
ClassDict.__setitem__('item', 'test')
这也有效:
ClassDict().__setitem__('item', 'test')
我在这里做错了什么会阻止第一个示例工作吗?有什么办法可以解决这个问题吗?
【问题讨论】:
-
特殊方法在type上查找;如果你创建了一个元类,这一切都有效。
标签: python assignment-operator class-method