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\n总面积:%.1f\n剩余面积:%.1f\n家具名称列表:%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)