【发布时间】:2014-10-09 07:24:53
【问题描述】:
我需要一个可以收集大量对象并提供有关容器元素的报告功能的容器。本质上,我希望能够做到:
magiclistobject = MagicList()
magiclistobject.report() ### generates all my needed info about the list content
所以我想到了对普通列表进行子类化并添加一个 report() 方法。这样,我就可以使用所有内置的列表功能。
class SubClassedList(list):
def __init__(self):
list.__init__(self)
def report(self): # forgive the silly example
if 999 in self:
print "999 Alert!"
相反,我也可以创建自己的具有 magiclist 属性的类,但如果我想使用以下方法访问列表,则必须创建用于追加、扩展等的新方法:
magiclistobject.append() # instead of magiclistobject.list.append()
我需要这样的东西(这似乎是多余的):
class MagicList():
def __init__(self):
self.list = []
def append(self,element):
self.list.append(element)
def extend(self,element):
self.list.extend(element)
# more list functionality as needed...
def report(self):
if 999 in self.list:
print "999 Alert!"
我认为对列表进行子类化是不费吹灰之力的。但是this post here 听起来像是一个禁忌。为什么?
【问题讨论】:
-
作为另一种选择,您可以完全跳过课程并编写
report(some_ordinary_list)函数。 -
在决定是否进行子类化时,请牢记Liskov Substitution Principle。
标签: python list subclass extend