【python】面向对象的封装、继承、多态的练习题

一、摆放家具
需求:
1)房子有户型,总面积和家具名称列表
    新房子没有任何的家具
2)家具有名字和占地面积,其中
    床:占4平米
    衣柜:占2平面
    餐桌:占1.5平米
3)将以上三件家具添加到房子中
4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
class Furniture():
    def __init__(self,name,area):
        self.name = name
        self.area = area

    def info(self):
        print('{}占地{}平米'.format(self.name,self.area))

class House():
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = area
        self.freeArea = area
        self.furnitureList = []

    def infos(self):
        print('户型:{},总面积:{},剩余面积:{},家具:{}'.format(self.house_type,self.area,self.freeArea,self.furnitureList))

    def add_furniture(self,furnitures):
        if furnitures.area > self.freeArea:
            print('{}面积太大了,放不下'.format(furnitures.name))
            return
        self.furnitureList.append(furnitures.name)
        self.freeArea -= furnitures.area

bed = Furniture('床',20)
bed.info()
wardrobe = Furniture('衣柜',2)
wardrobe.info()
desk = Furniture('餐桌',4.5)
desk.info()

my_house = House('两室一厅',100)

my_house.add_furniture(bed)
my_house.add_furniture(wardrobe)
my_house.add_furniture(desk)
my_house.infos()
二、需求:
    1)士兵瑞恩有一把AK47
    2)士兵可以开火(士兵开火扣动的是扳机)
    3)枪 能够 发射子弹(把子弹发射出去)
    4)枪 能够 装填子弹 --增加子弹的数量
class Gun():
    def __init__(self,type):
        self.type = type
        self.bullet_count = 0

    def add_bullet(self,count):
        self.bullet_count += count

    def send_bullet(self):
        if self.bullet_count <=0:
            print('{}没有子弹了。。。。'.format(self.type))
            return
        self.bullet_count -= 1
        print('{}发射了{}子弹'.format(self.type,self.bullet_count))

class Soldier():
    def __init__(self,name,gun):
        self.name = name
        self.gun = gun

    def fire(self):
        if self.gun == None:
            print('{}没有枪'.format(self.name))
            return
        self.gun.add_bullet(300)
        self.gun.send_bullet()

ak47 = Gun('AK47')
ryan = Soldier('Ryan',ak47)
ryan.fire()
三、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
实现思路及关键代码:
    1)定义乐器类Instrument,包括makeSound()方法,此方法中乐器声音:"乐器发出美妙的声音!"
    2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
    二胡Erhu声音:"二胡拉响人生"
    钢琴Piano声音:"钢琴美妙无比"
    小提琴Violin声音:"小提琴来啦"
    3)用main类,多态的方式对不同乐器进行切换
class Instrument():
    def makeSound(self):
        print('乐器发出美妙的声音!')

class Erhu(Instrument):
    def makeSound(self):
        print('二胡拉响人生')

class Piano(Instrument):
    def makeSound(self):
        print('钢琴美妙无比')

class Violin(Instrument):

    def makeSound(self):
        print('小提琴来啦')

class Main():
    def play(self,obj):
        #print('请问你要弹奏什么乐器?')
        obj.makeSound()

main = Main()
v = Violin()
p = Piano()
erhu = Erhu()
main.play(v)

 

 

 

 

Python多态练习题可以通过定义一个基和不同的子来实现多态性。在这个练习题中,一个基Basse被定义,它具有Think、Eat和Sleep三个方法。然后定义了三个子Person、Horse和Cat,它们分别继承自基Basse,并且重写了Think、Eat和Sleep方法。最后定义了一个行为Action,它的构造函数接受一个对象作为参数,并通过调用该对象的方法来实现多态性。 在这个练习题中,我们创建了一个Person对象Per、一个Horse对象Hor和一个Cat对象C,并且将它们分别传递给Action的构造函数。然后我们通过调用Action对象的Think、Eat和Sleep方法来展示多态性的应用。例如,per.Eat()调用了Per对象的Eat方法,而hor.Sleep()调用了Hor对象的Sleep方法。 通过这个练习题,我们可以看到不同的对象通过继承和重写基方法来实现了相同的动作,从而展现了多态性的特点。它使得我们可以使用统一的接口来处理不同的对象,并且根据对象的型来调用相应的方法。这样可以提高代码的灵活性和可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python关于多态的练习](https://blog.csdn.net/weixin_46601559/article/details/121285969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值