2013-04-04 56 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) 
相關問題