Skip to content

Latest commit

 

History

History
109 lines (81 loc) · 3.14 KB

50.多层继承.md

File metadata and controls

109 lines (81 loc) · 3.14 KB

多层继承

一.什么是多层继承?

所谓的多层继承就是已经继承其他类的类再被其他类继承

结构:

class 类名称1(父类名称):
    属性/方法
class 类名称2(类名称1):
    属性/方法 

demo:

# 老猫将自己的一身本领传给小猫,同时狗狗也将自己看家的本事传给了小猫

# 定一个父类
class Cat(object):
    def __init__(self):
        self.kongfu = "厉害的捉鱼本领"

    def make_fish(self):
        print("利用%s抓鱼" % self.kongfu)


# 定义第二个父类
class Dog(object):
    def __init__(self):
        self.kongfu = "厉害的看家本领"

    def kanmen(self):
        print("利用%s看家" % self.kongfu)


# MinCat,继承了Cat、Dog,Cat、Dog是父类。
class MinCat(Cat, Dog):
    def __init__(self):
        self.kongfu = "厉害的黏人本领"

    def make_fish(self):
        self.__init__()
        print("利用自己的新的技术抓鱼")

    def kanmen(self):
        self.__init__()
        print("利用自己本领看门")

    def makehappy(self):
        self.__init__()  # 执行本类的__init__方法,做属性初始化 self.kongfu = "猫氏...."
        print("利用%s讨主人开心" % self.kongfu)

    def old_make_fish(self):
        # 不推荐这样访问父类的实例属性,相当于创建了一个新的父类对象
        # print("直接调用Cat类的kongfu属性:%s" % Cat().kongfu)

        # 可以通过执行Cat类的__init__方法,来修改self的属性值
        print("执行Cat类的__init__方法前,self.kongfu属性:%s" % self.kongfu)
        Cat.__init__(self)
        print("执行Cat类的__init__方法后,self.kongfu属性:%s" % self.kongfu)
        Cat.make_fish(self)

    def old_kanmen(self):
        # 不推荐这样访问父类的实例属性,相当于创建了一个新的父类对象
        # print("直接调用Dog类的kongfu属性:%s" % Dog().kongfu)

        # 可以通过执行Dog类的__init__方法,来修改self的属性值
        print("执行Dog类的__init__方法前,self.kongfu属性:%s" % self.kongfu)
        Dog.__init__(self)
        print("执行Dog类的__init__方法后,self.kongfu属性:%s" % self.kongfu)
        Dog.kanmen(self)


class MinMinCat(MinCat):
    pass


xiaohei = MinMinCat()
print(xiaohei.kongfu)
xiaohei.make_fish()
xiaohei.old_kanmen()
xiaohei.makehappy()

print("="*30)
xiaohei.old_kanmen()
xiaohei.old_make_fish()

运行结果:

厉害的黏人本领
利用自己的新的技术抓鱼
执行Dog类的__init__方法前self.kongfu属性厉害的黏人本领
执行Dog类的__init__方法后self.kongfu属性厉害的看家本领
利用厉害的看家本领看家
利用厉害的黏人本领讨主人开心
==============================
执行Dog类的__init__方法前self.kongfu属性厉害的黏人本领
执行Dog类的__init__方法后self.kongfu属性厉害的看家本领
利用厉害的看家本领看家
执行Cat类的__init__方法前self.kongfu属性厉害的看家本领
执行Cat类的__init__方法后self.kongfu属性厉害的捉鱼本领
利用厉害的捉鱼本领抓鱼