值此考试周之际,实在无心复习,苦于离散,微积分久之困惑,无从下手,接续寒假未竟之课程,作此blog。
看不懂的单词
全英文实在难顶,只能慢慢一句一句地适应,在这里记下阅读文档过程中不认识的单词
muster
:号召,召集
irratate
:刺激,激怒
vanquish
:征服
pester
:纠缠
airborne
:空中
succumb
:屈服
wrath
:愤怒
paradigm
:范例
graphical user interface
:GUI
fleet
:舰队
expend
:花费(这么简单的都认不得了……)
wasp
:黄蜂
encapsulate
:封装
swarm
:一群
constarint
:约束
frail
:脆弱
onslaught
:猛攻
vault
:保险库
laser
:激光
语法知识
带默认值参量的函数定义方法:
1 | def __init__(self, name, exit=None): |
Ants
记录遇到的第一个问题:
thrower ant的nearest_bee方法实现中,定义上下界来让不同的子类具有自定义的攻击范围,自定义的方法有两种,一种是子类定义init函数,init函数是“magic method”,在我们不定义的时候编译器默认实现,我们定义之后可以根据需要,自定义输入的参数,根据参数来创建对象。另一种方式是直接在子类的类属性里添加即可。
1 | def nearest_bee(self): |
第二个问题:子类重写父类方法的过程出现死递归
在fireant的子类里重写父类的reduce_health方法,我们应在其中显示地调用超类的reduce_health,而不是直接在子类里调用该方法,如果直接调用,子类优先调用重写后的reduce_health方法,这样就会陷入死递归
1 | class FireAnt(Ant): |
第三行也可以写作
1 | Ant.reduce_health(self,amount) |
要注意的是,对以列表表示的bee而言,每一次fireant的攻击我们都应该对一个备份进行,否则可能因为有bee被打败,导致遍历出错,同时每一轮在fireant死后的攻击前也要重新copy,否则在对原来列表中进行遍历,可能会对None操作,导致段错误
一个有意思的点:如何实现ContainerAnt
一个方格内只能放一只蚂蚁,那么如何实现ContainerAnt使得两个蚂蚁在一个方格上呢,为Container写两个属性,CanContain和ant_contained,前者判断能否储存蚂蚁,后者对多的蚂蚁进行储存。