python实现一个Stack类
09-16-2011 by luw2007python 实现Stack类。
之前网上也有不同的实现,但是不是感觉版本太老就是感觉写的不好。自己写了一个,请大家指教。
# -*- coding:utf-8 -*- class Stack(object): """ Stack 类 """ def __init__(self, other=None): """doc test >>> s = Stack([1,2,3,4]) >>> s.pop() 4 >>> s.count 3 >>> e = Stack([1,2,3,4]) >>> s != e True >>> s.push(4) >>> s == e True >>> s += e >>> len(s) 8 >>> s.clear() >>> s.empty True >>> s.top data is empty """ self.data = [] if other is not None: if isinstance(other, Stack): self.data[:] = other.data elif isinstance(other, (list, tuple, set)): self.data[:] = list(other) else: self.data = list(other) def __repr__(self): return "<Stack: %s>" % str(self.data) def __len__(self): return len(self.data) def __eq__(self, other): return self.data == self.__cast(other) def __getitem__(self, i): return self.data[i] def __setitem__(self, i, item): self.data[i] = item def __delitem__(self, i): del self.data[i] def __add__(self, other): if isinstance(other, Stack): return self.__class__(self.data + other.data) else: raise TypeError('unsupported operand type(s) for +: %s' %(getattr(other,"__class__",''))) def __iadd__(self, other): if isinstance(other, Stack): self.data += other.data return self else: raise TypeError('unsupported operand type(s) for +=: %s' %(getattr(other,"__class__",''))) def __cast(self, other): if isinstance(other, Stack): return other.data else: return other @property def top(self): if self.empty: print 'data is empty' return None return self.data[-1] @property def count(self): return len(self.data) @property def empty(self): return len(self.data) == 0 def push(self, item): self.data.append(item) def pop(self): if self.empty: print 'data is empty' return None return self.data.pop() def clear(self): self.data = []