重载列表理解行为?

JS.*_*JS. 1 python overloading list-comprehension list

我的任务是创建一个硬件笼的模型.每个笼子包含N个槽,每个槽可以包含或不包含卡.

我想用列表模拟笼子.每个列表索引将对应于插槽号.cards[0].name="Card 0"

这将允许我的用户通过简单的列表推导来查询模型.例如:

for card in cards:
    print card.name
Run Code Online (Sandbox Code Playgroud)

我的用户(不是复杂的Python用户)将实时与模型进行交互,因此使列表索引与填充的卡不对应是不切实际的.换句话说,如果用户删除了一张卡片,我需要做一些表明卡片没有填充的东西 - 我的第一个冲动就是将列表项目设置为None.

Bossman喜欢这个计划,但是如果有一张牌缺失,他并不会对上面的列表理解感到失望.(它目前正在做什么.)他更不支持要求用户学习足够的Python来创建忽略的列表理解表达式None.

我的想法是对班级进行list分类,创建一个newclass.它会像列表一样工作,除了for card in cards只返回未设置的成员None.

有人请说明如何重载列表类,以便在子类上调用的列表推导将被忽略None?(到目前为止,当我尝试这种技能时,我的Python技能已经开始崩溃了.)

有谁能建议更好的方法?

Joh*_*ooy 8

>>> class MyList(list):
...     def __iter__(self):
...         return (x for x in list.__iter__(self) if x is not None)
... 
>>> 
>>> ml = MyList(["cat", "dog", None, "fox"])
>>> for item in ml:
...     print item
... 
cat
dog
fox

>>> [x for x in ml]
['cat', 'dog', 'fox']
>>> list(ml)
['cat', 'dog', 'fox']
Run Code Online (Sandbox Code Playgroud)