python列表_Python列表抽象
子類別清單
如果您堅持,則可以將列表子類化:
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)
(順便說一句,您將傳遞給容器方法的所有內容,都會傳遞給每個項目,除非發生錯誤)
那樣工作:
>>> 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
更好的解決方案
但是你不應該.更好的解決方案是顯式地執行此操作:
container = [a, b, c]
# ...
for item in container:
item.play()
請記住,顯式勝于隱式.這就是為什么通常最好遍歷各個項目并一一稱呼它們.
更糟糕的解決方案
如果要隱式調用列表項的方法,則有一種方法;)下面是首先搜索列表屬性的實現,如果未找到,將假定它是一種方法并將調用列表中的每個項:
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
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的python列表_Python列表抽象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python内建函数调用,Python
- 下一篇: 流畅的python第一章_《流畅的Pyt