#给自己好好上一课 数据结构与算法课
#抽象数据类型和面向对象编程
#代码实现Bag类
class Bag(object):
def __init__(self, maxsize = 10): #给出最大容量
self.maxsize = maxsize
self._items = list() #容器类型使用列表
def add(self, item): #定义一个add操作
if len(self) > self.maxsize:
raise Exception('Bag is full') #抛出异常
self._items.append(item)
def remove(self, item):
self._items.remove(item)
def __len__(self):
return len(self._items)
def __iter__(self):
for item in self._items:
yield item #带有yield的是生成器函数
def test_bag(): #定义一个测试类
bag = Bag()
bag.add(1)
bag.add(2)
bag.add(3)
assert len(bag) == 3 #assert叫做断言
bag.remove(3)
assert len(bag) == 2
for i in bag:
print(i)
从这里可以扩展学习的有:
1.抛出异常:
python使用 raise 语句抛出一个指定的异常。
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。
例如:上面的代码中
raise Exception('Bag is full')就是一个很好的应用,或者有异常的实例或者异常的类,比如类似以下这种格式。
def temp():
pass
raise temp('pass')
2.yield关键字:
带有yield关键字的函数就不是一个简单的函数,而是一个生成器。比如上面的__iter__()就相当于一个生成器。
在之前发过的博文里有一篇关于生成器的文章已做过详细描述,此处附上路径:
https://blog.csdn.net/honorwh/article/details/89314032
3.测试类的测试方法:
此处使用的是python的pytest模块,没有的可通过sudo apt-get install pytest安装
然后在shell里面输入pytest 文件名.py即可测试
如果是通过会提示passed字样,如果报错也有相关提示。
4.对于单双下划线的区别:
在之前的面试题1-10里面的第七题有提及,这里也同样附上路径:
https://blog.csdn.net/honorwh/article/details/89313046
下篇讲的是建立一个类实现数组操作。