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('暂时没有找到这个权限的客户')