1 class 父类: 2 def 喝酒(self): 3 print("我是老子,我爱喝酒") 4 def 吃鸡(self): 5 print("我是老子,我在吃鸡") 6 def 踢足球(self): 7 print("我是老子,我今天必须踢足球") 8 9 10 class 子类(父类): 11 def 大保健(self): 12 print('我是儿子,我要大保健') 13 def 喝酒(self): 14 print("我是儿子,儿子不能喝酒") 15 def 吃鸡(self): 16 super(子类,self).吃鸡()#执行父类中的方法 17 print("我是儿子我才不要吃鸡。我讨厌吃鸡") 18 #父类.吃鸡(self) 直接调用 19 20 print("调用子类中的方法:") 21 a=子类() 22 a.大保健() 23 print("调用父类中的方法") 24 a.踢足球() 25 print("我对父类中的方法不满意,要对父类中的方法重写") 26 a.喝酒() 27 print("虽然我重写了父类的内容,但是我还是想一起调用父类的方法") 28 a.吃鸡()
运行结果:
"D:Program Files (x86)python36python.exe" F:/python从入门到放弃/7.20/面向对象2.py 调用子类中的方法: 我是儿子,我要大保健 调用父类中的方法 我是老子,我今天必须踢足球 我对父类中的方法不满意,要对父类中的方法重写 我是儿子,儿子不能喝酒 虽然我重写了父类的内容,但是我还是想一起调用父类的方法 我是老子,我在吃鸡 我是儿子我才不要吃鸡。我讨厌吃鸡 Process finished with exit code 0
既可以执行父类,又可以执行子类的方法。
1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 Administrator 5 2018/7/20 6 ''' 7 #应用场景,假设有个web应用程序,开发人员需要给程序,天下新的功能。/////对于别人已经写好的模块,增加新的功能模块 8 class RequestHandler: 9 def __init__(self): 10 pass 11 12 def get(self): 13 print('这是完整的框架') 14 15 class BaseRequest(RequestHandler): 16 def __init__(self): 17 pass 18 def get(self): 19 print('这是自定义增加的功能') 20 super(BaseRequest, self).get() 21 d=BaseRequest() 22 d.get()
运行结果:
"D:Program Files (x86)python36python.exe" F:/python从入门到放弃/7.20/面向对象2.py 这是自定义增加的功能 这是完整的框架 Process finished with exit code 0
在python中可以继承两个父类。python和Cc++ 支持,其他不支持。
class Baseli: pass class RequestHandler(Baseli): def requsthandler(self): print("RequestHandler.requsthandler") def process_req(self): print("RequestHandler.process_req") self.requsthandler()#self代表对象a ,当被调用的时候会从Son 重新开始查询 class Mixu: def requsthandler(self): print("Mixu.requsthandler") class Son(Mixu,RequestHandler): pass a=Son() a.process_req()
运行结果:
"D:Program Files (x86)python36python.exe" F:/python从入门到放弃/7.20/面向对象2.py RequestHandler.process_req Mixu.requsthandler Process finished with exit code 0
1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 Administrator 5 2018/7/20 6 ''' 7 class Baseli: 8 def __init__(self): 9 print("Baseli.init") 10 11 class RequestHandler(Baseli): 12 def __init__(self): 13 # super(RequestHandler,self).__init__() 14 print("RequestHandler.init") 15 Baseli.__init__(self) 16 def requsthandler(self): 17 print("RequestHandler.requsthandler") 18 def process_req(self): 19 print("RequestHandler.process_req") 20 self.requsthandler()#self代表对象a ,当被调用的时候会从Son 重新开始查询 21 22 class Mixu: 23 def requsthandler(self): 24 print("Mixu.requsthandler") 25 26 class Son(Mixu,RequestHandler): 27 pass 28 29 a=Son() 30 a.process_req()
执行顺序:
1 #!/usr/bin/env python3 2 #-*- coding:utf-8 -*- 3 ''' 4 Administrator 5 2018/7/20 6 ''' 7 #应用场景,对于别人已经写好的模块,增加新的功能模块 8 class RequestHandler: 9 def __init__(self): 10 pass 11 12 def get(self): 13 print('这是完整的框架') 14 15 class BaseRequest(RequestHandler): 16 def __init__(self): 17 pass 18 def get(self): 19 print('这是自定义增加的功能') 20 super(BaseRequest, self).get() 21 d=BaseRequest() 22 d.get() 23 24 25 # class Father: 26 # def 喝酒(self): 27 # print("喝酒") 28 # def 吃鸡(self): 29 # print("我在吃鸡") 30 # 31 # 32 # class Son(Father): 33 # def 大保健(self): 34 # print('我要大保健') 35 # def 吃鸡(self): 36 # # super(Son,self).吃鸡()#执行父类中的方法 37 # print("我才不要吃鸡。我讨厌吃鸡") 38 # Father.吃鸡(self) 39 # 40 # 41 # a=Son() 42 # 43 # a.吃鸡() 44 45 46 47 # str() 48 # class Bar: 49 # def __init__(self,name,age,gender): 50 # ''' 51 # 构造方法的特性,类名加特性会自动执行构造方法 52 # :param name: 53 # :param age: 54 # :param gender: 55 # ''' 56 # self.name=name 57 # self.age=age 58 # self.gender=gender 59 # def foo(self): 60 # print(self.name,self.age,self.gender,"chifan") 61 # 62 # z1=Bar("Aliex",20,"nan") 63 # print(z1.name) 64 # z1.foo() 65 # z1.name='Tom' 66 # z1.age=12 67 # z1.gender='man' 68 # z1.foo('上山砍柴') 69 # z1.foo('下海捉虾') 70 71 72 73 74 # class Bar: 75 # def foo(self,arg): 76 # print(self,self.name,self.age,self.gender,arg) 77 # 78 # 79 # z1=Bar() 80 # z1.name='Tom' 81 # z1.age=12 82 # z1.gender='man' 83 # print(z1) 84 # z1.foo('12') 85 # print('ceshi'.center(30,'*')) 86 # 87 # z2=Bar() 88 # print(z2) 89 # z2.foo('66666')