这篇文章主要介绍了python面向对象编程的三大特性,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
面对对象案例
# 案例:史泰龙拿着加特林枪打鬼子
# 需求:
# 类 :有人Person,枪Gun,弹夹 Clip,子弹Bullet
#
# 属性和方法:
# Person 有名字属性 name, 有血量属性(只用于鬼子),有枪的属性(在拿起枪之前是None)
# 有安装子弹的方法install_bullet_2_clip接受两个参数弹夹和子弹
# 有安装弹夹的方法 install_clip_2_gun 接受两个参数枪和弹夹
# 有拿起枪的方法get_gun 接收一个参数 枪
# 有扣下了扳机的方法pull_trigger 接收一个参数 鬼子
# 有掉血量的方法enemy_temp 接收一个参数 掉的血量
#
# Gun 有名字属性 name, 有弹夹属性clip,有保存弹夹的方法save_clip,有发射子弹的方法fire
# Clip 有弹夹最大容量属性max ,有装子弹的列表bullets,有保存子弹的方法save_bullet(每次接收一发子弹存到列表),
# 有弹出子弹的方法(如有弹夹有子弹会返回列表的最后一发子弹)
#
# Bullet 子弹有 威力属性 power, 让敌人掉血的方法hit_enemy接收一个参数 鬼子
# 类 人
class Person:
def __init__(self, name):
self.name = name
self.blood = 100
self.gun = None
def install_bullet_2_clip(self, clip, bullet):
"""安装子弹"""
# 调用弹夹保存子弹的方法
clip.save_bullet(bullet)
def install_clip_2_gun(self, gun, clip):
"""安装弹夹"""
# 调用枪保存弹夹的方法
gun.save_clip(clip)
# 史泰龙拿起枪
def get_gun(self, gun):
self.gun = gun
def pull_trigger(self, enemy):
"""扣动扳机"""
# 调用枪开火的方法
gun.fire(enemy)
def enemy_temp(self, power):
"""鬼子掉血"""
# 判断血量是否大于零
if self.blood > 0:
self.blood -= power
def __str__(self):
# 判断是否有枪
if self.gun:
return '%s拿枪, 枪的信息:%s' % (self.name, self.gun)
else:
if self.blood > 0:
return '%s还剩%s血量' % (self.name, self.blood)
else:
return '%s死亡'
# 类 枪
class Gun:
def __init__(self, name):
self.name = name
self.clip = None
def save_clip(self, clip):
"""保存弹夹"""
self.clip = clip
def fire(self, enemy):
# 调用弹夹弹出子弹的方法
bullet = self.clip.pop_bullet()
# 判断是否有子弹
if bullet:
# 调用子弹击中敌人的方法
bullet.hit_enemy(enemy)
def __str__(self):
return '%s,有弹夹%s' % (self.name, self.clip)
# 类 弹夹
class Clip:
def __init__(self, max):
self.max = max
self.bullets = []
def save_bullet(self, bullet):
# 保存子弹
self.bullets.append(bullet)
# 弹出子弹
def pop_bullet(self):
# 判断是否有子弹
if len(self.bullets) > 0:
lost_bullet = self.bullets.pop()
# 返回弹出的子弹
return lost_bullet
def __str__(self):
return '弹夹的信息%s/%s' % (len(self.bullets), self.max)
# 类 子弹
class Bullet:
def __init__(self, power):
self.power = power
def hit_enemy(self, enemy):
"""敌人掉血"""
# 调用敌人掉血量的方法
# 鬼子血量减少(减少的量是子弹的威力)
enemy.enemy_temp(self.power)
# 需要完成的代码:
# 1创建对象史泰龙
person = Person('史泰龙')
# 2创建一个枪对象 加特林
gun = Gun('加特林')
# 3创建一个弹夹对象 最大容量20发
clip = Clip(20)
# 4创建五个子弹对象 每个威力是10
for i in range(5):
bullet = Bullet(10)
# 5史泰龙安装五个子弹(子弹,弹夹) 每次安装一个 要安装5次
person.install_bullet_2_clip(clip, bullet)
# 6史泰龙安装弹夹(弹夹,枪)
person.install_clip_2_gun(gun, clip)
# 7史泰龙拿起枪
person.get_gun(gun)
print(person)
# 8创建一个鬼子
enemy = Person('鬼子')
# 9史泰龙扣下了扳机,
for o in range(3):
person.pull_trigger(enemy)
print(person)
print(enemy)