• 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”
  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/testlearn/p/11719762.html
Copyright © 2020-2023  润新知