我的class Item
描述了某些项目,这些项目的数字ID(0,1,2,...)自然是已知的。我在类中实现了一个注册表,它通过ID来索引所有对象。我还有一个通过其ID检索对象的方法:
class Item
_registry = []
def __init__(self):
self._registry.append(self)
# ...
@classmethod
def get_item_by_id(cls, k):
return cls._registry[k]
# ...
这是一个合理的设计吗?
假设是,是否可以允许Item
类本身的下标?我可以(我认为)在__getitem__
的元类中定义Item
,从而允许语法Item[2]
而不是Item.get_item_by_id(2)
。
如果有任何问题(例如,太奇怪,可能导致不良副作用等),请告诉我。
答案 0 :(得分:3)
不。那很好。它肯定比长形式更好。当有人使用不正确的索引时,请确保返回明智的异常(KeyError
带有描述性消息,例如Invalid id for element
)。此外,请确保记录此行为,否则首先使对象可下载是没有意义的。