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 @ 2021-11-30 23:42  西瓜_皮  阅读(88)  评论(0编辑  收藏  举报