2013-04-04 60 views
2

我有一个包含静态辞典类:的Python类的静态辞典,支持项目分配

class MyClass: 
    my_dict = {} 
    def __init__(self, name): 
     self.name = name 
     MyClass.my_dict[self.name] = [] 
    def __call__(self, data): 
     MyClass.my_dict[self.name].append(data) 

每当我想更新字典,我必须使用MyClass.my_dict[key],但我想这个类本身来支持项目分配,所以我可以使用MyClass[key]来做同样的事情。有没有办法做到这一点?我正在使用Python 2.7。

+1

你看着覆盖 - '__setitem__'和'__getitem__'? – 2013-04-04 00:54:12

+0

@Jon Clements - 你能做到这一点本身或只对一个实例吗? – 2013-04-04 00:55:06

+0

仅限于一个实例... – 2013-04-04 00:55:31

回答

5

所以,这里是我落得这样做:

class MyClassType(type): 
    my_dict = {} 
    def __getitem__(cls, key): 
     return cls.my_dict[key] 
    def __setitem__(cls, key, value): 
     cls.my_dict[key] = value 
    def __str__(cls): 
     return cls.my_dict.__str__() 
    def iteritems(cls): 
     return cls.my_dict.iteritems() 

class MyClass(object): 
    __metaclass__ = MyClassType 
    def __init__(self, name): 
     self.name = name 
     MyClass[self.name] = [] 
    def __call__(self, data): 
     MyClass[self.name].append(data) 
相关问题