python - 面向对象编程的三大特征之一 - 继承

什么是继承?

当几个类对象中有共同的属性的方法时,就可以把这些属性和方法抽象并提取到一个基类中。
每个类特有的属性和方法还是在本类对象中定义。

只需要让每个类对象都继承这个基类,就可以访问基类中的属性和方法了。



为什么要继承?

看下面例子,熊猫具有吃、喝以及爬行的功能,
鸟具有吃、喝以及飞行的功能,

class Panda(object):
    def eat(self):
        print("吃")

    def drink(self):
        print("喝")

    def creeper(self):
        print("爬行")


class Bird(object):
    def eat(self):
        print("吃")

    def drink(self):
        print("喝")

    def fly(self):
        print("飞行")


eat() 和 drink()这两个方法完全一样,可以把这两个方法抽取出来放在一个基类 Animal (动物类)中,

熊猫 Panda 类和鸟 Bird 类中继承基类 Animal (动物类),这样就达到优化代码的目的。

class Animal(object):
    def eat(self):
        print("吃")

    def drink(self):
        print("喝")


class Panda(Animal):  # 继承 Animal (动物类)
    # 熊猫独有的功能 爬行 还是写在 Panda 类中,其他两个功能继承 Animal (动物类)即可
    def creeper(self):
        print("爬行")


class Bird(Animal):  # 继承 Animal (动物类)
    def fly(self):
        print("飞行")


res = Panda()  # 直接实例化 Panda 熊猫类
res.eat()  # 吃,继承了 Animal (动物类)吃的方法



构造函数的继承语法:

父类名称.__init__(self,参数1,参数2,...)

子类在调用某个方法或变量的时候,首先在自己内部查找,

如果没有找到,则开始根据继承机制在父类里查找。

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print("说话")


class Student(Person):
    def __init__(self, name, age, grade):  # 先继承,再重构

        Person.__init__(self, name, age)  # 调用父类的实例化方法,继承父类的构造方法。
        """
        self 相当于实例 Student
        实例 Student 的时候,执行 __init__ ,然后实例 Person
        """
        self.grade = grade  # 定义类的本身属性

    def speak(self):
        print(" {} 说,我 {} 岁了,正在读 {} 年级!" .format(self.name, self.age, self.grade))


res = Student("tom", 10, 5)
res.speak()  #  tom 说,我 10 岁了,正在读 5 年级!



super()函数

语法:

super(子类,self).__init__(参数1,参数2,....)

在子类中如果有与父类同名的成员,那就会覆盖掉父类里的成员。

那如果你想强制调用父类的成员呢?使用super()函数


class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print("说话")


class Student(Person):
    def __init__(self, name, age, grade):  # 先继承,再重构

        super(Student, self).__init__(name, age)

        self.grade = grade  # 定义类的本身属性

    def speak(self):
        print(" {} 说,我 {} 岁了,正在读 {} 年级!" .format(self.name, self.age, self.grade))


res = Student("tom", 10, 6)
res.speak()  #  tom 说,我 10 岁了,正在读 6 年级!



------分界线------


互联网人员的产品观

工作中多想想

用户从哪里来的,
产品怎么推广,
产品怎么获利,
公司的钱从哪里来的,


bug很大一部分就是开发跟产品、测试对需求理解不一致造成,

各职人员合理理解产品需求,沟通成本降低,效率翻倍,


互联网的本质是什么 - 赚钱,

所以有空的时候想想你们公司怎么赚钱的对你肯定百利无一害,
posted @   西瓜_皮  阅读(94)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示