面向对象的三大特性之二(2)-继承(多重继承)-多态

面向对象的三大特性之二(1)-继承(多重继承)-多态
一、多继承:Java或c#不支持多继承,即一个子类继承多个父类
        但是c++和python支持
    1.多继承调用父类方法优先级(默认情况左侧优先,并且一条路找到尽头)
        第一种情况:
        class F1():
            def a(self):
                print("F1.a")
        class F2:
            def a(self):
                print("F2.a")
        class S(F1,F2):
            pass
        ret = S()
        ret.a()#有先找函数a(),找到的第一个为输出
        第二种情况:单线寻找,找到尾端后若没有方法就去分支父集找
        class F0:
            def a(self):
                print("F0.a")
        class F1(F0):
            def al(self):
                print("F1.a")
        class F2:
            def a(self):
                print("F2.a")
        class S(F1,F2):#当F1没有函数时就沿着F1父类继续找
            pass
        ret = S()
        ret.a()
        第三种情况父集继承出现交叉(如果有共同父集出现,只找到公共父集之前,然后去其它分支查找,若都没有才去公共父集查找)
        class Bass:
            def a(self):
                print("Bass")
        class F0(Bass):
            def al(self):
                print("F0.a")
        class F1(F0):
            def al(self):
                print("F1.a")
        class F2(Bass):
            def a(self):
                print("F2.a")
        class S(F1,F2):#当F1没有函数时就沿着F1父类继续找
            pass
        ret = S()
        ret.a()
    2.代码执行流程。(self到底是谁的对象)
        例1:(特殊提示)
        class BaseRequest:
            pass
        class RequestHandler(BaseRequest):
            def serve_forever(self):
                print("RequestHandler.serve_forever")
                self.process_request()#此时的self指的是Son,所以不会执行本类的方法,依顺序头衔从到开始找到Minx类中的方法
            def process_request(self):
                print("RequestHandler.process_request")
        class Minx:
            def process_request(self):
                print("Minx.process_request")
        class Son(Minx,RequestHandler):
            pass
        obj = Son()
        obj.serve_forever()
        例2:(特殊提示:构造函数)
        class BaseRequest:
            def __init__(self):
                print("RequestHandler.init-2")
        class RequestHandler(BaseRequest):
            def __init__(self):
                print("RequestHandler.init-1")
                BaseRequest.__init__(self)
            def serve_forever(self):
                print("RequestHandler.serve_forever")
                self.process_request()#此时的self指的是Son,所以不会执行本类的方法,依顺序头衔从到开始找到Minx类中的方法
            def process_request(self):
                print("RequestHandler.process_request")
        class Minx:
            def process_request(self):
                print("Minx.process_request")
        class Son(Minx,RequestHandler):
            pass
        obj = Son() #init
        obj.serve_forever()
        解释socketserver源码执行关系
        import socketserver
        obj = socketserver.ThreadingTCPServer()#创建对象,找init(构造函数,找到init之后给构造函数传参数)
        obj.serve_forever()
二、多态:python里面原生多态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值