Python学习笔记16:实操案例十三(编写程序实现乐手弹奏乐器,设计自定义类表达出租车和家用轿车信息)
1.编写程序实现乐手弹奏乐器 注意Python的多态是“鸭子类型”,只要有这个Make_Sound方法就可以被Play调用,所以哪怕写个小鸟类型,尽管它不是Instrument的子类,但是它有这个方法,就可以Play(Bird())创建对象  
class Instrument():
def make_sound(self):
pass
class Erhu(Instrument):
def make_sound(self):
print('二胡在演奏')
class Piano(Instrument):
def make_sound(self):
print('钢琴在演奏')
class Violin(Instrument):
def make_sound(self):
print('小提琴在演奏')
def play(instrument):
instrument.make_sound()
class Bird():
def make_sound(self):
print('小鸟在唱歌')
if __name__=='__main__':
play(Erhu())
play(Piano())
play(Violin())
play(Bird())
2.设计自定义类表达出租车和家用轿车信息
所有的车(Car类型)都有车牌号(no)和车型(type),都会起步(start)和刹车(stop) 但是具体不同的车(FamilyCar)和(Taxi),起步和刹车的方式不一样,FamilyCar多个车主姓名name的信息,Taxi则多个公司名字Company的信息 注意调用父类构造函数的时候不要忘了传递参数:  明明是一样的道理,不知道为什么这个FamilyCar老报错参数过多······  一个可以参考的解决办法,但是我明显不是这个问题····· https://blog.csdn.net/yimaoyingbi/article/details/108429463  https://blog.csdn.net/weixin_43820813/article/details/123788206  检查了好几遍我也没发现为什么报错,我找了一段脚本之家的正确代码缝合上去,奇迹般就不报错了,但是对比一下我也没发现区别在哪········虽然我不理解为什么老师非要把Stop函数写前面,而Taxi和Car类型的Stop函数都写Start后面······· https://www.jb51.net/article/236552.htm  
class Car(object):
def __init__(self,type,no):
self.type=type
self.no=no
def start(self):
pass
def stop(self):
pass
class Taxi(Car):
def __init__(self,type,no,company):
super().__init__(type,no)
self.company=company
def start(self):
print('乘客您好!')
print(f'我是{self.company}出租车公司的,我的车牌是{self.no},请问您要去哪里?')
def stop(self):
print('目的地到了,请您付款下车,欢迎再次乘坐')
'''class FamilyCar(Car):不明原因报错
def __int__(self,type,no,name):
super().__init__(type,no)
self.name=name
def start(self):
print(f'我是{self.name},我的汽车我做主!')
def stop(self):
print('目的地到了,我们去玩儿吧!')
'''
class FamilyCar(Car):
def __init__(self, type, no, name):
super().__init__(type, no)
self.name = name
def stop(self):
print('目的地到了,我们去玩儿吧')
def start(self):
print(f'我是{self.name},我的汽车我做主')
if __name__=='__main__':
taxi=Taxi('上海大众','京A9765','长城')
taxi.start()
taxi.stop()
print('-'*30)
familycar= FamilyCar('广汽丰田','京B8888','张三')
familycar.start()
familycar.stop()
|