python3面向对象编程案例,python面向对象编程例题

这篇文章主要介绍了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)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值