zoukankan      html  css  js  c++  java
  • Python面向对象之

    类的演示1:  士兵突击

    # 需求
    # 假设: 每一个新兵都没有枪
    # 士兵许三多有一把AK47
    # 士兵可以开火(只有枪内有子弹才可以开火)
    # 枪能够发射子弹(在装填子弹之前枪内没有子弹)
    # 枪可以装填子弹(增加子弹数量,每次装填数量可以灵活选择)
    
    class Gun():
        def __init__(self,model):
            """初始化方法信息"""
            self.model = model
            self.bullet_count = 0
    
        def __str__(self):
            """返回定制信息"""
            return "%s枪还剩下%d颗子弹"%(self.model,self.bullet_count)
    
        def add_bullet(self,count):
            """装填子弹"""
            self.bullet_count += count
            print("装填子弹%d颗"%count)
    
        def shoot(self):
            """射击"""
            if self.bullet_count > 0:
                self.bullet_count -= 1
                print("%s突突突...剩余[%d]"%(self.model,self.bullet_count))
            else:
                print("没有子弹了")
                return
    
    
    class Soldier():
        def __init__(self,name):
            """初始化方法信息"""
            self.name = name
            self.gun = None
    
        # 不需要返回定制信息时不用定义__str__方法
        # def __str__(self):
        #     """返回定制信息"""
        #     return "新兵%s拿着一把%s,剩余子弹%d颗."%(self.name,self.gun.model,self.gun.bullet_count)
    
        def fire(self):
            """士兵开火"""
            if self.gun is None:
                print("%s还没有枪,不能开火"%self.name)
                return
            else:
                self.gun.shoot()
    
    # 创建一把枪对象
    ak47 = Gun("AK47")
    
    # 创建一个士兵对象
    xusanduo = Soldier("许三多")
    xusanduo.gun = ak47     # 给新兵一把ak47
    ak47.add_bullet(5)      # 装填子弹5颗
    xusanduo.fire()         # 开火

    类的演示2:  摆放家具

    # 需求
    # 房子有户型,总面积,和家具名称列表
    # 家具有名字和占地面积,其中:
    #     席梦思占地 4 平米
    #     衣柜占地 2 平米
    #     餐桌占地 1.5 平米
    # 将以上家具添加到房子中
    # 打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
    
    class HouseItem():
        def __init__(self,name,use_area):
            """初始化家具属性"""
            self.name = name
            self.use_area = use_area
    
        def __str__(self):
            """返回定制信息"""
            return "%s占地总面积是%.1f平米"%(self.name,self.use_area)
    
    
    class House():
        def __init__(self,type,area):
            """初始化房子属性"""
            self.type = type
            self.area = area
            self.free_area = area
            self.item_list = []
    
        def __str__(self):
            """返回房子定制信息"""
            return ("户型:%s
    总面积:%.1f
    剩余面积:%.1f
    家具名称列表:%s"
                    %(self.type,self.area,self.free_area,self.item_list))
    
        def add_item(self,item):
            """设定添加家具方法"""
            if item.use_area > self.free_area:       # 如果要添加的家具面积大于剩余面积
                print("%s的面积太大了,不能添加到房子中!"%item.name)
                return                               # 程序碰到return,后面的内容不会被执行
            self.item_list.append(item.name)        # 把添加进来的家具追加到家具列表中
            self.free_area = self.free_area - item.use_area       # 家具添加进来后,计算剩余面积
    
    # 创建了三个家具对象: 床,衣服,餐桌
    bed = HouseItem("席梦思",4)
    close = HouseItem("衣柜",2)
    table = HouseItem("餐桌",1.5)
    
    # 创建房子对象
    my_home = House("两室一厅",100)
    # 向房子内添加家具
    my_home.add_item(bed)
    my_home.add_item(close)
    my_home.add_item(table)
    # 输出房子对象的定制信息
    print(my_home)
  • 相关阅读:
    using 资源清理
    Http Module 介绍[转]
    一个类似CSDN的frameset框架
    vs.net2003的一个老问题“你试图打开的项目是Web项目,请指定URL路径”解决办法
    Oracle和SQL Server实现跨库查询
    Http 请求处理流程[转]
    Http Handler 介绍[转]
    asp.net后台控制div style
    sharepoint站点Feature的定制与开发
    为列表类型绑定Event Receiver
  • 原文地址:https://www.cnblogs.com/chenbin93/p/9046720.html
Copyright © 2011-2022 走看看