Python 继承,继承顺序 day7

一、继承:

继承的目的就是节省代码。当两个类有共同的东西时,需要继承

class Syy():
    country='China'
    def __init__(self):
        self.money=5000
    def chaogu(self):
        self.money+=50000
        print('炒股%s'%self.money)  

class Xs(Syy )      #继承:子类(父类),父类中的方法,子类中都有。继承可继承多个父类
    def chaogu(self):
        print('炒股,唱歌',self.money)     #money 是继承的money:5000
        self.money=500   #会覆盖父类的方法。方法重写
        print("重写后的money%s"%self.money)#money是重写后的money:500
        #super().XXX找到父类的XXX方法,并实例化一下(即调用)。可用作在父类基础上做修改。原父类的参数仍要传参:
        super().chaogu()

sdb=Xs()
sdb.chaogu()

二、例子

class BaseDB:
    def __init__(self,ip,port,password,db):
        self.ip=ip
        self.port=port
        self.password=password
        self.db=db
class MySQL:
    def __init__(self,ip,user,port,password,db):   #定义本参数要传的值
        super().__init__(ip,port,password,db)   #继承基类,并传入基类所需参数
        self.user=user
#当需要父类的功能,并需要补充时,使用super()来继承父类
class Redis(BaseDB):
    def conn(self):
        self.r=redis.Redis(host=self.ip,db=self.db,password=self.password)
#当需要的值与基类的值完全一致,不需要补充时,可以不用super()

三、多继承时的继承顺序

当一个类继承了多个类时,继承顺序:

class A(object):#python2中的新式类,等同与python3中的class A:
    def say(self):
        print('A')


class B(A):
    # pass
    def say(self):
        print('B')


class C(A):
    pass
    # def say(self):
    #     print('c')

class D(C, B):
    pass
d=D()
d.say()   
print(D.mro())   #查看继承顺序
# [<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]   #广度优先
#[<class '__main__.D'>, <class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>] 深度优先
#python 2 中深度优先
#python3或python2的新式类中广度优先

猜你喜欢

转载自www.cnblogs.com/candysalty/p/11243082.html