1 # 第二十一节课:面向对象高阶: 2 ''' 3 本节课大纲: 4 1- 商城案例实战 5 2- 对象的继承 6 3- 方法的重写 7 ''' 8 # 1- 商城案例实战: 9 ''' 10 需求: 11 用户基数比较大,很多老VIP需要一个更高的权限--SVIP:所有VIP的用户权限它都有 12 解决方案: 13 --方案:扩展需求业务:之前VIP权限不能动,只是在已有的业务,新增一个SVIP群体用户 14 --解决方案︰ 15 c 16 方案:扩展需求业务:之前VIP权限不能动,只是在已有的业务,新增一个SVIP群体用户 17 版本v6.0 18 VIP 用户--类 19 权限:折扣8折、生日券、礼品券 20 购买行为:全国包邮 21 SVIP 用户--类入会费:600 22 权限:折扣8折、生日券、礼品券、金额、理财服务- 23 购买行为:全国包邮+礼品---一年有5次机会 24 ***业务的扩展---继承 25 ''' 26 # *** 对象的继承--- 什么叫继承? 27 ''' 28 继承的作用: 29 业务扩展,新业务的一些功能跟老业务有相同点,继承老业务的类,减少代码量 30 python里面对象的继承: 31 class SubClassName (Parentclass1[,Parentclass2,...]): 32 'optional class documentation string' 33 class_suite 34 >括号里面的是被继承的类,叫做父类(或者基类), 35 SubClassName是继承类,叫做子类(或者继承类) 36 >父类可以有多个(多重继承) 37 ''' 38 # 继承的写法: 39 # class Tiger: 40 # nickName='老虎' 41 # __age=20 #这是私有的,无法直接继承 42 # #判断应该定义什么实例属性还是静态属性,就看这个属性是否和每个个体有关,这里每只老虎的体重都不一样,所有要定义实例属性 43 # def __init__(self,weight): 44 # self.tweight=weight 45 # #判断要定义实例方法还是静态方法,同样要方法是否涉及每个实例,这里每个老虎叫都只减少自己的体重,多以用实例方法 46 # def roar(self): 47 # print('我是老虎,wow!!体重减5斤') 48 # self.tweight -= 5 49 # def feed(self,food): 50 # if food=='meat': 51 # self.tweight += 10 52 # print('恭喜,虎虎喂食正确,体重加10斤!') 53 # else: 54 # self.tweight -= 10 55 # print('阿欧,喂食失误,体重减十斤!') 56 # # # 如上是老虎的类,现在要写一个华南虎的类,继承老虎的所有特性: 57 # # class SouTiger(Tiger): #创建类的时候直接把父类写在括号里就继承好了 58 # # pass #至此,继承完成 59 # se=SouTiger(100) #子类没有自己的__init__方法,直接继承的父类的weight 60 # print(se.nickName,se.tweight) #打印得:老虎 100 61 # se.feed('meat') 62 # print(se.tweight) 63 ''' 64 继承: 65 1- 如果子类没又__init__方法,会自动调用父类的__init__ 66 2- 在父类的实例属性不够用的时候,子类自己有__init__方法,不会自动调用,就意味着不能自动调用 67 如果话需要继承,手动调用 68 方法的重写:是多态一种体现 69 一个方法在父类和子类有不同的操作 70 什么时候使用重写:父类有一个方法a,但是子类去继承,发现a方法不满足子类,为了保持 71 整体一个模式,会重写这个方法,适合子类 72 ''' 73 # class Shouth(Tiger): 74 # ##多继承: class South(Tiger,Sheep) 75 # def __init__(self,weight,name): 76 # Tiger.__init__(self,weight) #super 77 # self.weight=weight 78 # self.name=name 79 # setiger=Shouth(120,'tom') #这样,就不光有父类的特性,还有子类自己的特性 80 # print(setiger.nickName,setiger.weight,setiger.name) #打印得:老虎 120 tom 81 82 # 3-方法的重写:商城的案例-SVIP继承VIP 83 ''' 84 VIP 用户--类 85 权限:折扣8折、生日券、礼品券 86 购买行为:全国包邮 87 SVIP 用户--类入会费:600 88 权限:折扣8折、生日券、礼品券、金额、理财服务- 89 购买行为:全国包邮+礼品---一年有5次机会 90 ''' 91 class Vipcustomer():#VIP 92 we1fare = "商品8折优惠+生日礼券" 93 def __init__(self,inName,inprice): 94 self.name=inName 95 self.price=inprice 96 def shopping(self): 97 print('---VIP用户***江浙泸包邮---') 98 class Svip(Vipcustomer): 99 def __init__(self,inName,inprice,inzhekou): 100 Vipcustomer.__init__(self,inName,inprice) 101 self.zk=inzhekou 102 def shopping(self): 103 print('---SVIP用户全国包邮+每年5次礼品赠送')##这就是方法的重写 104 s1=Svip('TOM',678,5) 105 print(s1.inprice) 106 # sv=Svip('耐克',100,'八折') 107 # sv.shopping() #打印得:---SVIP用户全国包邮+每年5次礼品赠送 108 #---------1.选择登陆级别---------- 109 # userLevel = input('VIP用户请输入:1 , SVIP用户请输入2') 110 # if userLevel=='1': 111 # inName,inprice=input('---<欢迎VIP用户登录>---,请输入:姓名,总花费:').split(',') 112 # vip1=Vipcustomer(inName,int(inprice.strip())) 113 # vip1.shopping() 114 # elif userLevel == '2': 115 # name,price,zk=input('---SVIP用户欢迎回家---,请输入:用户名,总花费,等级').split(',') 116 # svip1=Svip(inName,int(inprice.strip()),int(inzhekou.strip())) 117 # for one in range(1,4): #0,1,2,3 118 # if one > 2: 119 # print('Svip只有三次购物超级福利机会,已经使用完毕') 120 # super(Svip,svip1).shopping() #使用父类的shopping 121 # #需要调用父类被重写的方法: 122 # #super(子类类名,子类的实例名).方法() 123 # else: 124 # svip1.shopping() #子类的shopping() 125 # else: 126 # print('暂时没有找到这个权限的客户')