• 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很大一部分就是开发跟产品、测试对需求理解不一致造成,
    
    各职人员合理理解产品需求,沟通成本降低,效率翻倍,
    
    
    互联网的本质是什么 - 赚钱,
    
    所以有空的时候想想你们公司怎么赚钱的对你肯定百利无一害,
    
  • 相关阅读:
    std::auto_ptr
    make_pair
    _stdcall与_cdecl(了解)
    函数名与函数指针(了解)
    空指针与野指针
    std::bind(二)
    C++ map 映照容器
    sql find duplicate
    数量
    sort sign numeric
  • 原文地址:https://www.cnblogs.com/wwho/p/15627065.html
Copyright © 2020-2023  润新知