第21节课:面向对象高阶

  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('暂时没有找到这个权限的客户')
原文地址:https://www.cnblogs.com/66-liu/p/14059283.html