第七章实例与实战
实例01:创建大雁类并定义飞行方法
在IDLE中创建一个名称为geese.py 的文件,然后在该文件中定义一个大雁类Geese,并定义一个构造方法,然后再定义一个实例方法fly(),该方法有两个参数,一个是self,另一个用于指定飞行状态,最后再创建大雁类的实例,并调用实例方法 fly()。
代码如下:
class Geese: '''大雁类''' def __init__(self, beak, wing, claw): #构造器 print("我是大雁类!我有以下特征:") print(beak) print(wing) print(claw) def fly(self, state): print(state) #调用方法 beak_1 = "喙的基部较高,长度和头部的长度几乎相等" wing_1 = "翅膀长而尖" claw_1 = "爪子是璞状的" whildGoose = Geese(beak_1, wing_1, claw_1) whildGoose.fly("我飞行的时候,一会儿排成个人字,一会排成个一字")
运行结果如下:
实例02:通过类属性统计类的实例个数
在 IDLE中创建一个名称为geese_a.py 的文件,然后在该文件中定义一个雁类Geese,并在该类中定义4个类属性,前3个用于记录雁类的特征,第4个用于记录实例编号,然后定义一个构造方法,在该构造方法中将记录实例编号的类属性进行加1操作,并输出4个类属性的值,最后通过for循环创建4个雁类的实例。
代码如下:
class Geese: '''雁类''' neck = "脖子较长" wing = "振翅频率高" leg = "腿位于身体的中心支点,行走自如" number = 0 def __init__(self): #构造器 Geese.number += 1 print("\n我是第" + str(Geese.number) + "只大雁,我属于雁类!我有以下特征:") print(Geese.neck) print(Geese.wing) print(Geese.leg) #创建四个雁类的对象 list1 = [] for i in range(4): list1.append(Geese()) print("一共有" + str(Geese.number) + "只大雁")
运行结果如下:
实例03:在模拟电影点播功能时应用属性
在IDLE中创建一个名称为film.py 的文件,然后在该文件中定义一个电视节目类TVshow,并在该类中定义一个类属性,用于保存电影列表,然后在_init_()方法中定义一个私有的实例属性,再将该属性转换为可读取、可修改(有条件进行)的属性,最后创建类的实例,并获取和修改属性值。
代码如下:
class TVshow: list_film = ["战狼2", "红海行动", "西游记女儿国", "熊出没·变形记"] def __init__(self, show): self.__show = show @property #将方法转换为属性 def show(self): return self.__show #返回私有属性的值 @show.setter #设置setter方法,修改稀有属性的值 def show(self, value): if value in TVshow.list_film: #判断值是否在列表中 self.__show = "您选择了《" + value + "》, 稍后将播放" else: self.__show = "您点播的电影不存在" tvshow = TVshow("战狼2") print("正在播放:《", tvshow.show, "》") print("您可以从", tvshow.list_film, "中选择要播放的电影") tvshow.show = "红海行动" print(tvshow.show)
运行结果如下:
实例04:创建水果基类及其派生类
在IDLE中创建一个名称为 fruit.py 的文件,然后在该文件中定义一个水果类Fruit(作为基类),并在该类中定义一个类属性(用于保存水果默认的颜色)和一个harvest()方法,然后创建Apple类和Orange类,都继承自Fruit类,最后创建Apple类和Orange类的实例,并调用harvest()方法(在基类中编写)。
代码如下:
class Fruit: color = "绿色" def harvest(self, color): print("水果是:" + color + "的!") #输出形参color print("水果已经收获......") print("水果原来是:" + Fruit.color + "的!"); #输出类属性color class Apple(Fruit): #继承父类Fruit color = "红色" def __init__(self): print("我是苹果") class Orange(Fruit): color = "橙色" def __init__(self): print("\n我是橘子") apple = Apple() apple.harvest(apple.color) #调用父类的harvest方法 orange = Orange() orange.harvest(orange.color) #调用父类的harvest方法
运行结果如下:
实例05:在派生类中调用基类的__init__()方法定义类属性
在IDLE中创建一个名称为fruit.py的文件,然后在该文件中定义一个水果类Fruit〈作为基类),并在该类中定义_init_()方法,在该方法中定义一个类属性(用于保仔水果默认的颜巴),然石仕Fruit类中定义一个harvest()方法,再创建Apple类和 Sapodilla类,都继承自Fruit类,最后创建Apple类和Sapodilla类的实例,并调用harvest()方法(在基类中编写)。
代码如下:
class Fruit: #父类 def __init__(self, color = "绿色"): Fruit.color = color def harvest(self, color): print("水果是:" + self.color + "的!") #输出形参color print("水果已经收获......") print("水果原来是:" + Fruit.color + "的!") #输出类属性color class Apple(Fruit): color = "红色" def __init__(self): print("我是苹果") super().__init__() #调用父类的构造器 class Sapodilla(Fruit): def __init__(self, color): print("\n我是人参果") super().__init__(color) #调用父类的构造器 #重写父类harvest()方法 def harvest(self, color): print("人参果是:" + self.color + "的!") # 输出形参color print("人参果已经收获......") print("人参果原来是:" + Fruit.color + "的!") #输出类属性color apple = Apple() apple.harvest(apple.color) sapodilla = Sapodilla("白色") sapodilla.harvest("金黄色带紫色条纹")
运行结果如下:
实战一:修改手机默认语言
模智能手机的默认语言为英文,但制造手机时可以将默认语言设置为中文。编写手机类,采用无参构造方法时,表示使用默认语言设计,利用有参构造方法时,修改手机的默认语言。效果如图7.22所示。
代码如下:
class Phone: def __init__(self, language = "英文"): if language == "英文": print("智能手机的默认语言为英文") else: print("将智能手机的默认语言设置为" + language) phone1 = Phone() phone2 = Phone("中文") # Python的构造函数是不能重载一个类只能有一个构造函数存在。 # 定义多个构造方法时,实例化类只实例化最后的构造方法 # 即后面的构造方法会覆盖前面的构造方法
运行结果如下:
实战二:给信用卡设置默认密码
创建信用卡类,并且为该类创建一个构造方法,该构造方法有3个参数,分别是self、卡号和密码。其中,密码可以设置一个默认值123456,代表默认密码。在创建类的实例时,如果不指定密码,就采用默认密码,否则要重置密码。效果如图7.23所示。
代码如下:
class Card: def __init__(self, id, pwd = "123456"): if pwd == "123456": print("信用卡" + str(id) + "的默认密码为" + str(pwd)) else: print("重置信用卡" + str(id) + "的密码为" + str(pwd)) card1 = Card("40137335633800642") card2 = Card("40137335633800642", "168779")
运行结果如下:
实战三:打印每月销售明细
模拟实现输出进销存管理系统中的每月销售明细,运行程序,输入要查询的月份,如果输入的月份存在销售明细,则显示本月商品销售明细;如果输入的月份不存在或不是数字,则提示“该月没有销售数据或者输入的月份有误!”。效果如图7.24所示。
代码如下:
class Sale: def __init__(self): self.details = {'2': ['商品编号:T0001 商品名称:笔记本电脑', '商品编号:T0002 商品名称:华为荣耀6X', '商品编号:T0003 商品名称:iPad', '商品编号:T0004 商品名称:华为荣耀V9', '商品编号:T0005 商品名称:MacBook']} def showInfo(self, month): #查询商品明细 if month in self.details: print(str(month) + "月份的商品销售明细如下:") for item in self.details[month]: print(item) else: print("该月份没有销售数据或输入月份有误!") print("————————————————销售明细——————————————————") sale = Sale() while(True): month = input("请输入要查询的月份(比如1、2、3等,输入0退出):") if month == '0': break sale.showInfo(month)
运行结果如下:
实战四:模拟电影院的自动售票机选票页面
在电影院中观看电影是一项很受欢迎的休闲娱乐,现请模拟电影院自动售票机中自动选择电影场次的页面,例如,一部电影在当日的播放时间有很多,可以自动选择合适的场次。效果如图7.25所示。
代码如下:
class Movie: movie_name = '' sessions = '' seat = '' def __init__(self): print('\n欢迎使用自动售票机~~') def choiceMovie(self, name): #选择电影 Movie.movie_name = name print("已选电影:" + Movie.movie_name) def choiceSessions(self, sessions): #选择场次 Movie.sessions = "2018.4.12 " + sessions print('电影场次:' + sessions) def seats(self, seat): #选择座位 Movie.seat = seat print('选择座位:' + seat) def showInfo(self): print("电影:" + Movie.movie_name) print("播出时间:" + Movie.sessions) print("座位:" + Movie.seat) print('\n出票完成,请别忘记取票') movie1 = Movie() print('\n请选择正在上映的电影:1、《长津湖》 2、《战狼2》3、《红海行动》') movie1.choiceMovie(input()) print('\n请选择电影播放场次:1、9:30 2、10:40 3、12:00') movie1.choiceSessions(input()) print('\n请选择座位剩余座位:10-01, 10-02, 10-03, 10-04') movie1.seats(input()) print('\n正在出票。。。\n') # 电影票信息 movie1.showInfo()
运行结果如下: