疑点难点:
    1 子类对父类方法进行不同的实现以后,将子类再赋值给父类对象,父类对象再根据子类对象的类型,来调用同一方法的不同实现,这样就实现了多态。
    这句话不理解

    思考题:

    知识点汇总:
    理解面向过程
    1 什么是面向过程
    将一个问题分成若干步,然后一步一步进行求解,这个解题思路的过程就是面向过程
    理解面向对象
    1 理解面向对象需要思考两个核心问题
    ①什么是对象
    ②什么是面向对象
    2 在cpython中,一切皆对象
    以整型为例:我们在定义一个整型变量时,实际是在定义一个整型对象
    3 面向对象是指对某一个具体的事物进行描述、概况、总结。
    面向对象编程的核心是抽象,什么是抽象呢?
    4 抽象是对某类事物进行概况和归类(分类),这里的概况是对某类事物共性的概况
    5 什么是类?
    在面向对象中,我们可以定义一种数据类型来对某些事物进行抽象(概况、归类)
    抽象后的数据类型就叫类。
    例如cpython中的字典数据类型就是一个类类型,对字典类型实例化后可以得到一个字典对象
    6 类由类属性和类方法组成。
    类属性是表示这种数据类型的共有特征
    类方法是表示这种数据类型的共有行为
    7 什么是对象?如何构建一个对象
    对类进行实例化,可以得到一个具体的对象,实例化后的对象共享类的属性和方法
    例如实例化后的字典对象,就具有字典类型的属性,以及字典类型的所有方法。
    面向对象的三大特征
    1 什么是封装
    就是将其装起来,打包起来。在面向对象的封装里,是指将其数据类型的属性和方法的实现
    细节藏起来,只提供操作接口。需要使用该数据类型的属性和操作方法时,将数据通过接口
    传入即可,待里面的属性和方法对传进入数据处理完后,将结果返回给数据提供方。
    2 什么是继承
    例如生活中的“子承父业”就是一种继承。面向对象中的继承也是,比如B类继承于A类,
    B类就获得了A类的所有属性和操作方法。
    在面向对象设计中,可以通过继承来实现复用和扩展。因为只是继承,而不扩展的话,
    这样的设计是没有意义的。
    3 什么是多态
    多态是指同一事物存在多种状态或行为。
    在面向对象的程序设计中,多态是指父类方法有多种不同的实现方法。
    如何对父类方法进行多种不同的实现?可以通过继承的方式,例如多个子类对同一个父类方法
    进行继承。
    类的属性、类方法、静态方法
    1 class关键字
    使用class定义的数据类型就叫做类,类似函数是用def来定义一样,类是用class来定义。
    类名一般用驼峰式命名法,函数名一般用小写加下划线命名法,以便我们去区分类和函数
    2 类命名的规范
    ①驼峰式命名法
    ②良好的可读性
    3 类属性、类方法的访问
    在python中使用成员操作符“.”来访问类属性、类方法、静态方法。
    类方法、静态方法的调用同普通函数。
    4 类属性
    表示这种数据类型的共有特征。
    定义类属性的语法:直接在类体中定义类属性、在类体中定义类属性和类方法时,要注意代码缩进
    5 类方法
    表示这种数据类型的共有行为。
    类方法的定义:在类体中通过def来定义一个函数,在函数前加上@classmethod修饰符,
    表示定义的是类方法。(classmethod的中文释义就是表示类方法)
    6 静态方法
    静态方法的定义:在类体中通过def来定义一个函数,在函数前加上@staticmethod修饰符,
    表示定义的是静态方法。
    7 类方法和静态方法的区别
    静态方法无需定义任何描述类的形参。
    8 类方法和静态方法的共同点
    两者的方法都是类作用域中的全局方法,可以被所有实例化后的对象共享。
    在静态方法中,显式定义类类型参数,可以模拟类方法的功能。
    在实际调用时,需要显式传递类类型作为参数。
    9 类属性、类方法、静态方法的共同点
    在代码中,直接通过类名+成员操作符即可访问(使用)
    类实例化、对象属性、对象方法
    1 类的构造函数与实例化
    在对类进行实例化时,如果没有定义构造函数,那么python会自动调用一个默认的无参
    构造函数来进行实例化。使用类名+()的方式来实例化一个对象。
    对类进行实例化以后,可以返回一个具体的对象。
    2 类构造函数的语法结构:
    class Class Name:
    def init(self):
    pass
    类体中的init函数就是构造函数,参数self表示当前的对象。
    备注:类的构造函数要与类方法区分,类方法中的参数cls表示当前的类。
    无论是self还是cls,都是一种通用的写法,也可以修改成其他的参数名称
    3 类的实例化
    对类进行N次实例化,就可以得到N个具体的对象。这些对象都共享类属性
    4 类属性、对象属性
    类属性相当于全局属性,对象属性是属于当前对象的属性。
    定义对象的属性,通过函数中的self参数进行定义。
    定义对象属性的基本语法:self.name = value
    self表示当前的对象,“.”是成员操作符,self.name表示为对象定义了一个叫做
    name的属性,value表示属性的值。
    5 对象方法
    类方法相当一个全局的方法,为所有对象共享。对象方法属于当前对象。
    定义对象方法时,需要在函数中至少定义一个参数,该参数通常命名为self
    定义对象的基本语法:
    def method(self):
    pass
    method表示方法名,self参数表示当前对象。对象方法的命名规则与规范同普通函数。
    6 类属性、类方法、静态方法、对象属性、对象方法
    全局的、作用于所有对象、操作方法和属性为所有对象共享
    局部的、作用于当前对象。操作方法和属性为当前对象自用
    将属性和方法藏起来
    1 在面向对象的设计中,将数据类型的属性和方法的实现细节藏起来。
    对外提供对数据类型进行操作的接口。
    凡是类或对象的使用者,都可以称为客户端。
    2 访问控制
    在python中,通过在属性名或者函数名前面加上双下划线__,来对属性和方法进行访问控制。
    属性名或函数名加上双下划线以后,对外是不能访问的,但在类内部依然可以被访问。
    3 python没有真正的私有