1 # encoding=utf-8
 2 
 3 class Queue:
 4     """
 5     相同元素的队列, 初始化需指定长度与元素类型
 6     """
 7     def __init__(self, size=25, _type=int):
 8         """
 9         __size: the size of queue
10         __cur_size: the size of elements
11         :param size: init size of queue
12         :param _type:   the type of queue element
13         """
14         assert isinstance(size, int)
15         if not type(_type) == type.__class__:
16             "传递的是类实例"
17             _type = type(_type)
18         self.__type = _type
19         self.__value = []
20         self.__size = size
21         self.__cur_size = 0
22 
23     def __del__(self):
24         del self.__value
25 
26     def __str__(self):
27         return str(self.__value) + '\t\tQueue for %s and size=%s' % (self.__type, self.__size)
28 
29     def put(self, value):
30         """
31         push an element to stack top
32         :param value: element
33         :return: None
34         """
35         assert isinstance(value, self.__type)
36         if self.__cur_size >= self.__size:
37             raise OverflowError('the Queue if full')
38         self.__value.append(value)
39         self.__cur_size += 1
40 
41     def get(self):
42         """
43         pop an element from stack top
44         :return: element in stack top
45         """
46         if not self.__cur_size:
47             raise IndexError('the Queue is empty')
48         self.__cur_size -= 1
49         return self.__value.pop(0)
50 
51     def empty(self):
52         """
53         set the queue to empty
54         :return: None
55         """
56         del self.__value
57         self.__value = []
58         self.__size = 0
59 
60     @property
61     def is_empty(self):
62         """
63         queue == empty
64         :return: bool
65         """
66         return not self.__cur_size
67 
68     @property
69     def is_full(self):
70         """
71         queue == full
72         :return: bool
73         """
74         return self.__size == self.__cur_size
75 
76     def resize(self, size):
77         """
78         reset a size for queue
79         :param size: new size of queue
80         :return:  None
81         """
82         assert isinstance(size, int)
83         if size < self.__cur_size:
84             del self.__value[0: self.__cur_size-size]
85             self.__cur_size = size
86         self.__size = size
87 
88     @property
89     def remainder_size(self):
90         """
91         remainder_size of queue
92         :return: remainder_size of queue
93         """
94         return self.__size - self.__cur_size

实例化时, 类型可通过类名或实例传递, 如下:

Queue(10, 1)
Queue(10, int)