1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python学习:面向对象基础练习——士兵突击(代码演示) 及 身份运算符

Python学习:面向对象基础练习——士兵突击(代码演示) 及 身份运算符

时间:2019-12-18 23:05:01

相关推荐

Python学习:面向对象基础练习——士兵突击(代码演示) 及 身份运算符

1、面向对象封装案例II——士兵突击

目标

士兵突击案例身份运算符

封装

封装是面向对象编程的一大特点面向对象编程的第一步—— 将属性方法封装到一个抽象的外界使用创建对象,然后让对象调用方法对象方法的细节都被封装类的内部

一个对象的属性可以是另外一个类创建的对象

士兵突击

需求

士兵许三多有一把AK47士兵可以开火能够发射子弹装填装填子弹——增加子弹数量

这里有两个类,一个士兵(Soldier),一个枪(Gun);

士兵类中有两个属性:name和gun;一个方法:fire(开火)

枪类中有两个属性:model(枪类)和buttet_count(子弹数);两个方法:add_buttet(装填子弹)和shoot(发射)。

这里的枪类包含在士兵类,所以写代码的时候先写士兵类。

代码演示步骤1:开发枪类

shoot方法需求

1> 判断是否有子弹,没有子弹无法射击2> 使用print提示射击,并且输出子弹数量

class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):# 用子弹数量这个属性与传递进来的形参做个相加self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))# 1. 创建枪对象ak47 = Gun("AK47")ak47.add_bullet(50)ak47.shoot()

代码演示步骤2:开发士兵类

假设:每一个新兵 都没有枪

None的使用!定义没有初始值的属性:

在定义属性时,如果不知道设置什么初始值,可以设置为None

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

fire方法需求

1> 判断是否有枪,没有枪没法冲锋2> 喊一声口号3> 装填子弹4> 射击

注: 在给对象添加属性时,不要再外界添加这个属性,而应该在初始化方法内部,先把属性添加好。如果想要修改这个属性的值,可以再在外部使用赋值语句给这个属性赋值一个新对象就可以。

class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = None# 1. 创建枪对象ak47 = Gun("AK47")ak47.add_bullet(50)ak47.shoot()# 2. 创建许三多xusanduo = Soldier("许三多")xusanduo.gun = ak47print(xusanduo.gun)

代码演示步骤3:开发士兵开火

class Gun:def __init__(self, model):# 1. 枪的型号self.model = model# 2. 子弹的数量self.bullet_count = 0def add_bullet(self, count):self.bullet_count += countdef shoot(self):# 1. 判断子弹数量if self.bullet_count <= 0:print("[%s] 没有子弹了..." % self.model)return# 2. 发射子弹,-1self.bullet_count -= 1# 3. 提示发射信息print("[%s] 突突突... [%d]" % (self.model, self.bullet_count))class Soldier:def __init__(self, name):# 1. 姓名self.name = name# 2. 枪 - 新兵没有枪self.gun = Nonedef fire(self):# 1. 判断士兵是否有枪# if self.gun == None:if self.gun is None:print("[%s] 还没有枪..." % self.name)return# 2. 高喊口号print("冲啊...[%s]" % self.name)# 3. 让枪装填子弹self.gun.add_bullet(50)# 4. 让枪发射子弹self.gun.shoot()# 1. 创建枪对象ak47 = Gun("AK47")# 2. 创建许三多xusanduo = Soldier("许三多")xusanduo.gun = ak47xusanduo.fire()print(xusanduo.gun)

一个对象的属性可以是另外一个类创建的对象

小结

创建了一个士兵类,使用到__init__内置方法在定义属性时,如果不知道设置什么初始值,可以设置为None封装的方法内部,还可以让自己的使用其他类创建的对象属性调用已经封装好的方法

2、身份运算符:

身份运算符用于比较两个对象的内存地址是否一致 ——是否是对同一个对象的引用

Python中针对None比较时,建议使用is判断

is 与 == 区别:

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

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

————————————————————————————————————————————————————————

博客记录日常学习内容~

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