疑点难点:
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没有真正的私有
