1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python面向对象封装--士兵突击

python面向对象封装--士兵突击

时间:2019-01-09 02:34:22

相关推荐

python面向对象封装--士兵突击

士兵突击

重点理解:一个对象的属性,可以是另一个类创建的对象。

项目需求:

1、士兵许三多有一把AK47

2、士兵可以开火

3、枪能够发射子弹

4、枪能够装填子弹

项目分析:

根据项目需求,可以提炼出两个类,

枪类的属性有:名字、子弹数量

枪类的方法有:装填子弹、射出子弹

人类的属性有:名字、枪

人类的方法有:开火

因为许三多需要使用AK47,所以我们应该首先开发枪类。

项目开发:

开发枪类:

在开发枪对象的shoot方法时,要先判断枪是否还有子弹,如果没有,需要直接使用return关键字停止执行下面的代码。

class Gun:def __init__(self, name):self.name = nameself.bullets = 0def add_bullet(self, count):self.bullets += countdef shoot(self):if self.bullets <=0:print("%s没有子弹了" % self.name)returnself.bullets -= 1print("突突突,%s还有%d发子弹" % (self.name, self.bullets))ak47 = Gun("AK47")ak47.add_bullet(5)ak47.shoot()

开发士兵类:

假设每个新兵都没有枪。因为新兵没有枪,所以需要通过形参传递的属性只有name一个。在使用士兵类创建好许三多对象之后,可以使用赋值语句将AK47赋值给许三多的枪属性。

在定义属性的时候,如果不知道设置什么初始值,可以设置为None,这样就避免了在外部给对象设置属性。

None关键字表示什么都没有,表示一个空对象,没有方法和属性,是一个特殊的常量,可以将None赋值给任何一个变量。

在开发士兵类的fire方法的时候:

1、判断是否有枪

2、喊一声口号

3、装填子弹

4、射击

class Solider:def __init__(self, name):self.name = nameself.gun = Nonedef fire(self):# 判断士兵是否有枪if self.gun is None:print("%s还没有枪"% self.name)return# 喊一声口号print("冲啊。。。。")# 装填子弹self.gun.add_bullet(5)# 开火self.gun.shoot()xusanduo = Solider("许三多")xusanduo.gun = ak47xusanduo.fire()

这节课的重点是,一个对象的属性,可以是另外一个类创建的对象,所以在士兵开枪的时候,就可以调用封装在枪类里面的装填子弹和发射子弹的方法。

在判断士兵有没有枪的时候,用了身份运算符is

is用于判断两个变量引用对象是否为同一个

==用于判断引用变量的值是否相等

>>> a = [1, 2, 3]>>> b = [1, 2, 3]>>> b is aFalse>>> b == aTrue

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。