zoukankan      html  css  js  c++  java
  • python 面向对象:封装---对象的属性可以是另一个类创建的对象

    # 对象封装:对象的属性可以是另一个类创建的对象
    # 案例需求:
    # 1、士兵许三多有一把AK47
    # 2、士兵用枪射击标靶
    # 3、枪能装填和发射子弹
    
    
    class Gun:
    
        # 分析:
        # 枪的属性:1、枪有型号区分;2、枪要有子弹
        # 枪的方法:1、能装填子弹;2、能发射子弹
        def __init__(self, model):
            self.model = model
            self.bullet_count = 0
    
        def add_bullet(self, count):
            self.bullet_count += count
    
        def shoot(self):
            self.bullet_count -= 1
    
    
    class Soldier:
    
        # 分析:
        # 士兵属性:士兵有名字;“可能”会有配枪
        # 士兵方法:士兵用枪射击标靶
        def __init__(self, name):
            self.name = name
            self.gun = None     # 因为该属性不确定,所以用None
    
        def check_gun(self):
    
            if self.gun.bullet_count <= 0:
                print(F"{self.gun.model} 没有子弹,请装填子弹")
    
                print("装弹完成")
    
        def fire(self, shoot_count):
            if self.gun is None:
                print(F"士兵 {self.name} 没有配枪,无法射击!")
                return
            else:
                print(F"士兵 {self.name} 已配备 {self.gun.model}!")
            self.gun.add_bullet(shoot_count)
            for i in range(shoot_count):
                self.gun.shoot()
                print(F"{self.name} 用 {self.gun.model} 成功射中标靶
    子弹剩余:{self.gun.bullet_count}")
    
    
    xusanduo = Soldier("许三多")
    xusanduo.fire(3)    # 士兵 许三多 没有配枪,无法射击!
    ak47 = Gun("AK47")  # 士兵 许三多 已配备 AK47!
    xusanduo.gun = ak47
    xusanduo.fire(3)    # 许三多 用 AK47 成功射中标靶,子弹剩余:XXX
    
    # 总结:Soldier类的属性self.gun的值为Gun类创建的对象“ak47”
  • 相关阅读:
    五分钟上手Markdown
    css中居中方法小结
    事务和同步锁
    插入排序
    插入排序
    交换排序
    eclipse 常用快捷键
    交换排序
    二叉搜索树(BST)
    二叉树遍历以及根据前序遍历序列反向生成二叉树
  • 原文地址:https://www.cnblogs.com/testlearn/p/11719762.html
Copyright © 2011-2022 走看看