zoukankan      html  css  js  c++  java
  • python_day24_class_类_继承

    #-----------------继承(儿子继承父亲的东西,但是不一定全部继承),二级继承--------------------#
    # class Father:
    # def basketball(self):
    # pass
    # def soccer(self):
    # pass
    # class son(Father): #为son这个类指定继承的类Father,称son为子类,Father为父类。或称son为派生类,Father为基类
    # def table(self):
    # pass
    # s=son()
    # s.soccer()

    #-----------------继承(儿子继承父亲,父亲继承爷爷),三级继承--------------------#
    # class Grandfather:
    # def tennis(self):
    # pass
    # class Father(Grandfather):
    # def basketball(self):
    # pass
    # def soccer(self):
    # pass
    # class son(Father): #为son这个类指定继承的类Father,称son为子类,Father为父类。或称son为派生类,Father为基类
    # def table(self):
    # pass
    # s=son()
    # s.tennis() #孙子继承爷爷的对象
    # s.soccer() #儿子继承父亲的对象

    #-----------------继承,实例--------------------#
    # class F:
    # def f1(self): #第116行
    # print('F.f1')
    #
    # def f2(self): #如果不想让s去继承这个对象,那么在s这个类中也构造一个f2对象即可,在自己里面找到类,就肯定不去别人那里找了
    # print('F.f2')
    # class s(F):
    # def s1(self): #第122行
    # print('s.s1')
    # obj = s()
    # obj.s1() #这一句去执行的时候,此时第122行的s1中的self是形参,代之obj
    # obj.f1() #哪个对象去调用,self就代之那个,第116行的self也代之obj。 self永远指代调用方法的调用者,此时f1是调用方法,obj是调用者


    #-----------------继承,既执行父类的foo()方法,也执行子类中的foo()方法--------------------# *****
    # class F: #父类
    # def f1(self): #第116行
    # print('F.f1')
    #
    # def f2(self): #如果不想让s去继承这个对象,那么在s这个类中也构造一个f2对象即可,在自己里面找到类,就肯定不去别人那里找了
    # print('F.f2')
    # class s(F): #子类
    # def s1(self): #第122行
    # print('s.s1')
    # super(s,self).f2() #找到父级的类,再找到父级这得方法f2(),其中super的第一个参数必须为子类的类名,第二个参数均为self
    # #super(s,self).f2()也有执行父类这得f2()方法的作用,用下main这一句也可以代替上一句
    # F.f2(self) #这一句可以代替上一句,功能一样的但是必须有形参self,但是推荐用super()
    # obj = s()
    # obj.s1() #这一句去执行的时候,会执行子类中的s1()方法,也会去执行父类中的f2()方法,所以最后先打印s.s1 再打印F.f2
    #以上的具体实际应用:父类中的f1和f2方法可以是别人写的函数,自己拿过来调用,而子类这的s1方法是自己写的函数
    #这子类中添加父类的方法,这样这执行的时候,这样就可以不破坏别人代码的基础上去执行别人的代码,也可以执行自己的代码


    # #-------------------多继承-----------------------#
    # class F1:
    # def a(self):
    # print('F1,a')
    # class F2:
    # def a(self):
    # print('F2.a')
    # class S(F1,F2): #类既继承F1也继承F2,最左边的具有最高的优先级,优先被调用
    # pass
    # obj = S()
    # obj.a() #打印F1,a

    #-------------------两个类中含有相同的方法(函数),去执行的顺序-----------------------#
    # class BaseHandler:
    # pass
    # class RequestHandler(BaseHandler):
    # def sever_forever(self):
    # print('RequestHandler.sever_forever')
    # self.process_request() #第166行,这里的self就是obj,obj又是son这个类的方法,所以执行这一句时候,
    # # son会首先去自己类里面的方法,去找有没有process_request(),如果没有再去son继承的父类中去找process_request()
    # #而son继承了Minx类,Minx中正好有process_request()这个方法,所以第166行会去Minx中去执行process_request()方法
    # def process_request(self):
    # print('RequestHandler.process_request')
    # class Minx:
    # def process_request(self):
    # print('Minx.process_request')
    # class son(Minx,RequestHandler):
    # def a(self):
    # print('F2.a')
    #
    # obj = son()
    # obj.sever_forever() #打印 RequestHandler.sever_forever和Minx.process_request

    #-------------------两个类中含有__init___(self)方法-----------------------#
    class BaseHandler:
    def __init__(self):
    print('BaseHandler.__init__')
    class RequestHandler(BaseHandler): #RequestHandler去继承BaseHandler
    def __init__(self):
    print('RequestHandler.__init__')
    #BaseHandler.__init__(self) #加上这一句也会去执行aseHandler.__init__(self)方法,勿忘加self
    def sever_forever(self):
    print('RequestHandler.sever_forever')
    self.process_request()
    def process_request(self):
    print('RequestHandler.process_request')
    class Minx:
    def process_request(self):
    print('Minx.process_request')
    class son(Minx,RequestHandler):
    def a(self):
    print('F2.a')
    obj = son() #打印RequestHandler.__init__。这一句只执行RequestHandler中的__init__()方法,其余RequestHandler中的方法不再执行
    #上一句执行时会首先去找son类中有没有__init__()方法,
    # 发现在son内没有,在Minx内也没有,而在另一个父类RequestHandler中有__init__()方法,所以就会首先去
    # 执行RequestHandler中的__init__()方法,而RequestHandler的父类中BaseHandler也有__init__()方法,但不再去执行
    #除非在RequestHandler中的__init__(self)方法中有Base.__init__(self)或者super(RequestHandler,self).__init__()语句

    obj.sever_forever() #打印 RequestHandler.sever_forever和Minx.process_request
    #-------------------类中的方法调用时,别的函数是否也会被调用的问题,答案是不会执行。。。-----------------------#
    class RequestHandler(BaseHandler):  #RequestHandler去继承BaseHandler
    def __init__(self):
    print('RequestHandler.__init__')
    def sever_forever(self):
    print('RequestHandler.sever_forever')
    self.process_request()
    def process_request(self):
    print('RequestHandler.process_request')
    obj = RequestHandler()  #打印RequestHandler.__init__ 这一句只执行RequestHandler中的__init__()方法,其余RequestHandler中方法不再执行           
    obj.server_forever() #打印 RequestHandler.sever_forever和RequestHandler.process_request
    #上一句只执行server_forever()
    obj.process_request() #这一句就只执行process_request()这一个方法了

    今天给我的台式机换了win10系统,感觉会是一个新的开始吧
    hiajing in HZ
    2018.10.24




















  • 相关阅读:
    C常用字符字符串处理函数
    ipmotool
    It旅程经典报错信息
    带外监控
    zookeeper工作原理解析
    浅析MySQL各种索引
    osx下查看jar文件
    TopCoder SRM624 BuildingHeightEasy 题解
    ViewPager切换动画效果改动
    vim中的高亮全部同样单词的方法
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/9844297.html
Copyright © 2011-2022 走看看