我对下面的代码有两个问题:
如果在空堆栈上调用pop(),是否应引发异常?
class Stack(object):
def __init__(self):
self.storage = []
def isEmpty(self):
return len(self.storage) == 0
def push(self,p):
self.storage[:0] = p
def pop(self):
"""issue: throw exception?"""
return None
我不会讨论列表结构,因为这个问题已经讨论过了。相反,我将提到我处理堆栈的首选方法:
我总是使用
Queue
模块。它支持FIFO和LIFO数据结构,并且是线程安全的。有关详细信息,请参见the docs。它不实现
isEmpty()
函数,而是在无法执行推送或弹出时引发Full
或Empty
异常。不需要跳过这些循环,请参见5.1.1 Using Lists as Stacks
如果您坚持使用方法
isEmpty()
和push()
,您可以:使用组合而不是继承是正确的,因为继承带来了不想公开的方法。
这样,您的接口的工作方式与
list
(例如,在pop
上的行为相同)非常相似,只是您已将其锁定以确保没有人弄乱内部。相关问题 更多 >
编程相关推荐