类方法项赋值
我基本上创建了一个字典类,这个类使用类方法来实现所有的魔法方法,代码大概是这样的:
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')
我这里是不是做错了什么,导致第一个例子不能正常工作?有没有什么办法可以解决这个问题?
1 个回答
0
为了实现我想要的功能,也就是能够做到:
ClassDict['item'] = 'test'
我需要像Martijn提到的那样,把这些特殊方法作为元类来实现。
所以我最后的实现代码是这样的:
class MetaClassDict(type):
_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)
class ClassDict(object):
__metaclass__ = MetaClassDict