2011-04-24 30 views
3

我的class Item描述了某些項目,它們的數字ID(0,1,2,...)自然是已知的。我已經在類中實現了一個註冊表,該註冊表通過其ID來索引所有對象。我也有通過ID檢索對象的方法:Python:可自定義的類

class Item 
    _registry = [] 
    def __init__(self): 
     self._registry.append(self) 
     # ... 
    @classmethod 
    def get_item_by_id(cls, k): 
     return cls._registry[k] 
    # ... 

這是一個合理的設計?

假設是這樣,允許爲Item類本身設置下標嗎?我可以(我認爲)在Item的元類中定義了__getitem__,因此允許語法Item[2]而不是Item.get_item_by_id(2)

如果它有任何問題(例如,太奇怪,會導致不良副作用等),請告訴我。

+2

這就是'__getitem__'的用途... – Adam 2011-04-24 23:48:15

+0

nitpick:我想第4行應該讀取'self .__ class __._ registry.append(self)',這是更明確的 – 2011-06-29 00:41:23

回答

3

沒有。這很好。這絕對比長形式更好。當有人使用不正確的索引時,請確保您返回明智的例外(帶有描述性消息的KeyError,例如Invalid id for element)。此外,請確保您記錄了此行爲,否則在首先將對象限制在腳本中沒有任何意義。