python列表_Python列表抽象
子類別清單
如果您堅(jiān)持,則可以將列表子類化:
class ListContainer(list):
def play(self, *args, **kwargs):
for item in self:
item.play(*args, **kwargs)
def close(self, *args, **kwargs):
for item in self:
item.close(*args, **kwargs)
(順便說一句,您將傳遞給容器方法的所有內(nèi)容,都會(huì)傳遞給每個(gè)項(xiàng)目,除非發(fā)生錯(cuò)誤)
那樣工作:
>>> class Sound(object):
def __init__(self, name):
self.name = name
def play(self):
print('Playing %s' % (self.name,))
def close(self):
print('Closing %s' % (self.name,))
>>> container = ListContainer([Sound('a'), Sound('b'), Sound('c')])
>>> container.play()
Playing a
Playing b
Playing c
>>> container.close()
Closing a
Closing b
Closing c
更好的解決方案
但是你不應(yīng)該.更好的解決方案是顯式地執(zhí)行此操作:
container = [a, b, c]
# ...
for item in container:
item.play()
請(qǐng)記住,顯式勝于隱式.這就是為什么通常最好遍歷各個(gè)項(xiàng)目并一一稱呼它們.
更糟糕的解決方案
如果要隱式調(diào)用列表項(xiàng)的方法,則有一種方法;)下面是首先搜索列表屬性的實(shí)現(xiàn),如果未找到,將假定它是一種方法并將調(diào)用列表中的每個(gè)項(xiàng):
class BadImplicitContainer(list):
def __getattr__(self, name):
def _wrapper(*args, **kwargs):
for item in self:
getattr(item, name)(*args, **kwargs)
return _wrapper
這就是以前片段示例中的行為:
>>> container = BadImplicitContainer([Sound('bad'), Sound('Bad'), Sound('BAD')])
>>> container.play()
Playing bad
Playing Bad
Playing BAD
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的python列表_Python列表抽象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python内建函数调用,Python
- 下一篇: 读书笔记 23种设计模式总结