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技能已经开始崩溃了.)
有谁能建议更好的方法?
>>> 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)