2022.10.14 周五
面向对象(类和对象)
1.编程思想
面向过程编程:穷人思想(基本语法、分支、循环、逻辑思维)
函数式编程: 小资思想(基本语法、分支、循环、逻辑思维、函数)
面向对象编程:富豪思想(基本语法、分支、循环、逻辑思维、函数、类和对象)
2.什么是类和对象
类就是具有相同功能和相同属性的对象的集合(类是一个抽象的概念)
对象就是类的实例(某一类事物的具体表现)
3.定义类(创建类)——用代码描述这个类是拥有哪些相同属性和哪些相同功能的对象的集合
数值相关的共同特点用属性来描述——属性就是定义在类中的变量
非数值相关的共同特点用方法来描述——方法就是定义在类中的函数
语法:
class 类名:
类的说明文档
类的内容
说明:
class ——关键字固定写法
类名 ——由程序员自己命名;必须满足两点命名要求
三个规范:首字母大写,采用驼峰式命名(大驼峰);见名知义;不适用系统函数、类、模块名
: ——固定写法
类的说明文档 ——多行注释
类的内容 ——用代码来描述这个类相同的功能和属性有哪些;
主要包含属性(对象属性、类属性)和方法(对象方法、类方法、静态方法)
5.创建类的对象
语法:
类名() ——创建指定类的对象并且返回
方法
1.对象方法
- 怎么定义:直接定义在类中的函数就是对象方法
- 怎么调用:以‘ 对象.xxx() ’的方式来调用——通过对象来调用对象方法
- 特点:通过对象来调用对象方法的时候默认参数self不需要传参,系统会自动将当前对象传给self(self是谁调用就指向谁)
2.类方法
- 怎么定义:需要在定义的函数前加“@classmethod”
- 怎么调用:以‘ 类.xxx() ’的方式来调用——通过类来调用类方法
- 特点:通过对象来调用对象方法的时候默认参数cls不需要传参,系统会自动将当前类传给cls
3.静态方法
- 怎么定义:需要在定义的函数前加“@staticmethod”
- 怎么调用:以‘ 类.xxx() ’的方式来调用——通过类来调用静态方法
- 特点:没有特点
初始化方法
1.魔法方法
方法名由两个下划线开头并且由两个下划线结尾,并且会在特定情况下自动调用的方法就是魔法方法
2.常用的两个魔法方法
-
_ _ init _ _方法
当通过类创建对象的时候,类中的 _ _ init _ _方法会被自动调用
在类中添加_ _ init _ _可以根据需要在方法中随意添加参数
如果在_ _ init _ _方法中添加了额外的参数,那么在创建这个类的对象的时候必须通过类名后面的括号来给 _ _ init _ _方法提供额外的实参
-
_ _repr _ _ 方法
打印类的对象的时候会自动调用 _ _repr _ _方法,并且将这个方法的返回值作为这次打印的打印结果
这个方法的返回值必须是字符串(_ _repr _ _方法中的self指向的当前的打印对象)
属性——定义在类中的变量
1.类属性
- 怎么定义:直接定义在类中的变量就是类属性
- 怎么使用:以 ‘ 类.xxx ’的方式使用类属性
- 什么时候用:属性值不会因为对象不同而不一样就定义成类属性
2.对象属性
- 怎么定义:以‘ self.属性名 = 值 ‘的形式定义在_ _ init _ _方法中
- 怎么使用:以 ‘ 对象.xxx ’的方式使用对象属性
- 什么时候用:属性值会因为对象不同而不一样就定义成对象属性
3.对象属性赋值方式
- 直接用具体的数据给对象属性赋值
- 用一个没有默认值的参数给对象属性赋值
- 用一个有默认值的参数给对象属性赋值
如果实现函数的功能需要对象属性,那么这个函数必须定义成对象方法。并且在方法中通过self来提供你所需要的对象属性
继承——让子类直接拥有父类的属性和方法
语法:
class 类名:
说明文档
类的内容
注意 如果定义类的时候没有写继承关系,那么这个类默认继承object(基类);(class 类名: == class 类名(object):)
在子类中添加类属性和方法的时候,直接定义新的类属性和新的方法
如果要在子类中添加对象属性,必须在子类的 _ _ init _ _ 方法中通过super()去调用父类的 _ _init _ _方法