Python中存在的继承是什么样子的???

130 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的17天,点击查看活动详情

👨‍🎓作者:Java学术趴

🏦仓库:GithubGitee

✏️博客:CSDN掘金InfoQ云+社区

💌公众号:Java学术趴

🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。

🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的!

👋大家好!我是你们的老朋友Java学术趴。今天给大家分享一下Python中的继承,大家可能都知道Java中存在继承,但是Java中的继承是单继承方式,而在Python中可以是单继承也可以是多继承的方式。

第十三章 继承

python和Java一样,也存在oop的三大特性:封装、继承、多态

对于面向对象的继承来说,其实就是将多个共有的方法提取到父类中,子类仅需继承父类而不必一一的实现每个方法

python继承和Java继承最大的区别就是:python支持多继承,而Java中不支持

13.1 单继承


# 继承。所有的类都默认继承object,继承语法:类名(继承父类的类名)
class Animal(object):
​
    def __init__(self, name, age):
        self.name = name
        self.age = age
​
    """
    此时Animal作为一个父类
    定义一些公共的方法
    """
​
    def eat(self):
        print('吃饭')
        pass
​
    def sleep(self):
        print('睡觉')
        pass
​
    pass
​
​
# 定义Animal的子类
class Dog(Animal):
​
    # 该子类中特有的方法
    def wanWangJiao(self):
        print('小狗汪汪叫')
        pass
​
    pass
​
​
# 定义Animal的子类。小括号中的写的就是继承的父类名称
class Cat(Animal):
​
    # 该子类中特有的方法
    def miaoMiaoJiao(self):
        print('小猫喵喵叫')
        pass
​
    pass
​
​
# 定义子类的实例对象
cat = Cat('小花', 3)
dog = Dog('小黑', 4)
# 调用父类中的方法
cat.eat()
# 吃饭
cat.sleep()
# 睡觉
dog.eat()
# 吃饭
dog.sleep()
# 睡觉

13.2 多继承

继承的传递性

多继承继承父类中的属性


# 多继承。所有的类都默认继承object,继承语法:类名(继承父类的类名, 继承父类的类名)
class Animal(object):
​
    def __init__(self, name, age, type):
        self.name = name
        self.age = age
        self.type = type
        pass
​
    def eat(self):
        print('吃饭')
        pass
​
​
class Zoom(object):
​
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex
​
    def sleep(self):
        print('睡觉')
        pass
    pass
​
​
# 定义一个子类同时继承Animal、Zoom
class Dog(Zoom, Animal):
​
    def __init__(self, name, age, sex):
        # 这里需要继承父类的类属性,也是继承实体类中的第一个实体类中参数
        # 使用 super() 调用,可以不给定 self 参数,他会自己寻找父类
        super().__init__(name, age, sex)
        # 使用类名调用的形式,此时需要给定 self 参数
        Animal.__init__(self, name, age, type)
        # Zoom
        
    # 此时的self代表的是:Dog这个实例类对象,它继承的参数是第一个类中的属性
    # 所以它获取不到Animal类中的 type 属性,会报错
    # 如果想获取type属性,需要把Animal类写到第一个位置
    def __str__(self):
        # return '小狗的名字叫做:{},小狗的年龄是:{},小狗的性别是:{},小狗的类型是:{}'.format(self.name, self.age, self.sex, self.type)
        return '小狗的名字叫做:{},小狗的年龄是:{},小狗的性别是:{}'.format(self.name, self.age, self.sex)
​
    # 该子类中特有的方法
    def wanWangJiao(self):
        print('小狗汪汪叫')
        pass
    pass
​
​
# 定义子类的实例对象
# 在多继承的情况下,需要看Dog()中继承的多个父类第一个是谁,其中的参数对应的是第一个继承父类中的参数个数和类型
dog = Dog('小黑', 3, '男')
print(dog)
# 小狗的名字叫做:小黑,小狗的年龄是:3,小狗的性别是:男

子类使用父类中的方法


# 多继承。所有的类都默认继承object,继承语法:类名(继承父类的类名, 继承父类的类名)
class Animal(object):
​
    def eat(self):
        print('吃饭')
        pass
    passclass Zoom(object):
​
    def sleep(self):
        print('睡觉')
        pass
    pass
​
​
# 定义一个子类同时继承Animal、Zoom
class Dog(Zoom, Animal):
​
    # 该子类中特有的方法
    def wanWangJiao(self):
        print('小狗汪汪叫')
        pass
    pass
​
​
dog = Dog()
# 使用父类中的方法
dog.eat()
# 吃饭
dog.sleep()
# 睡觉
# 使用自己特有的方法
dog.wanWangJiao()
# 小狗汪汪叫

多级父类调用以及方法覆盖


# 多继承。所有的类都默认继承object,继承语法:类名(继承父类的类名, 继承父类的类名)
class Animal(object):
​
    def eat(self):
        print('吃饭')
        pass
​
​
class Zoom(Animal):
​
    def sleep(self):
        print('睡觉')
        pass
​
    # 子类覆盖重写了父类的eat()方法。必须存在继承才会出现方法的覆盖重写
    def eat(self):
        print('吃骨头')
        pass
    pass
​
​
class Dog(Zoom):
​
    # 该子类中特有的方法
    def wanWangJiao(self):
        print('小狗汪汪叫')
        pass
    pass
​
​
dog = Dog()
# 使用父类中的方法
dog.sleep()
# Animal
# 可以看到Zoom、Animal类中都存在eat()方法
# 他会采用就近原则,先调用直接父类的方法,之后在向上一级进行寻找
dog.eat()
# 吃骨头

类的传递过程中,我们把父类又称为基类,子类称为派生类,父类的属性和方法可以一级一级的传递到子类

所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖重写与父类中同名的方法

子类继承父亲的类属性并且添加自己额外的属性


# 多继承。所有的类都默认继承object,继承语法:类名(继承父类的类名, 继承父类的类名)
class Animal(object):
​
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.type = type
        pass
​
    def eat(self):
        print('吃饭')
        pass
​
​
# 定义一个子类同时继承Animal、Zoom
class Dog(Animal):
​
    def __init__(self, name, age):
        # 继承父类的类属性
        Animal.__init__(self, name, age)
​
        # 自定义子类的特有属性
        self.type = '柯基'
​
    def __str__(self):
​
        return '小狗的名字叫做:{},小狗的年龄是:{},小狗的类别是:{}'.format(self.name, self.age, self.type)
​
    # 该子类中特有的方法
    def wanWangJiao(self):
        print('小狗汪汪叫')
        pass
​
    pass
​
​
dog = Dog('小黑', 3)
print(dog)
# 小狗的名字叫做:小黑,小狗的年龄是:3,小狗的性别是:男