一. 编程思维 - 程序员在遇到问题解决问题的思维模式
1.面向过程编程 - 基本语法
2.函数式编程 - 掌握函数(遇到问题先想想有没有一个已经存在的函数具备解决这个问题的能力,如果有直接调用,没有就创建一个这样的函数)
3.面向对象编程 - 类、对象(变量、函数)
二.类
1.概念
类就是拥有相同功能和相同属性的对象的集合 - 抽象的概念
对象就是类的实例(类具体的表现)
list 是类,[10,20]是列表的对象
类就是类型、类别
2.定义类(创建类)- 用代码描述清除这个类是拥有哪些相同功能和哪些相同属性的对象的集合
功能 - 函数
属性 - 保存数据的变量
语法:
class 类名:
类的说明文档
类的内容
说明:
1)class - 关键字;固定写法
2)类名 - 程序员自己命名
采用驼峰式命名并且首字母大写(类名大写开头;驼峰式 - 指从第二个单词开始单词首字母大写)
3): - 固定写法
4)类的说明文档 - 多行注释
5)类的内容 - 由方法(对象方法,类方法,静态方法)和属性组成
方法 - 定义在类中的函数
属性 - 定义在类中的变量
class Person:
'''人类'''
num = 61 #num是属性
def ear(self): #eat是方法
print('吃饭‘)
3.创建对象
语法:
类名() - 创建指定类对应的一个对象,并且将对象返回
p1 = Person()
p2 = Person()
print(p1)
print(p2)
4.类中的方法
定义在类中的函数,用来描述类具备的功能,实质就是函数
方法一:对象方法
定义:直接定义在类中的函数
调用:对象.XXX( )
特点:自带一个参数self,通过对象调用方法的参数self不用传参,系统会自动将当前对象传给self(self–谁调用,就指向谁)
什么时候用:如果实现函数功能需要用到对象属性就用对象方法
方法二:类方法
定义:在函数前加装饰器"@classmethod"
通过:类.XXX() 的调用
特点:自带参数cls,不需要传参,系统自动将当前类传给cls。
什么时候用:如果实现函数功能不需要对象属性需要类就是用类方法
方法三:静态方法
在函数前加装饰器"@staticmethod"
调用-----类.XXX( )
特点:没有特点
注:实现函数功能既不需要对象属性也不需要类
三、魔法方法
方法名以__开头并且以__结尾的自带的方法就是魔法方法
所有的魔法方法都会在特定的情况下被自动调用
方法名1:
init
作用:
每次创建类的对象的时候会自动调用类中的__init__方法
创建类的对象的时候 参数和参数个数由类中的__init__方法决定
方法名2:
repr
作用:
打印对象的时候自动调用 对象对应的类中的__repr__方法,
该方法是定制打印规则(函数的返回值是什么,对象打印就是什么;返回值必须是返回值)
4.属性
1、 类属性
怎么创建?
在类中直接定义一个变量,这个变量就是类属性
怎么使用?
通过类来使用,包括获取和修改
什么时候用?
当属性值不会因为对象不同而不一样的时候就使用类属性
2、 对象属性
怎么创建?
以’self.属性名=值’的形式定义在类的__init__方法
怎么使用?
通过对象来使用,对象.属性名
什么时候用?
当属性值会因为对象不同而不一样的时候就使用类属性
对象属性赋初值的方式
实现一个圆形类
实现一个矩形类
四、属性的增删改查
1、在面向对象编程的时候可以使用对象来代替字典
2、对象的对象属性也支持增伤改查操作
1)查 - 获取属性值
a. 对象.属性
获取指定属性的值
b. getattr(对象, 属性名)
获取指定属性的值
c. getattr(对象, 属性名, 默认值)
获取指定属性的值,属性不存在直接返沪默认值
2)增、改
a. 对象.属性 = 值
当属性存在的时候修改指定属性对应的值,当属性不存在的时候给对象添加属性
b. setattr(对象, 属性名, 默认值)
当属性存在的时候修改指定属性对应的值,当属性不存在的时候给对象添加属性
3)删
a. del 对象.属性
b. delattr(对象, 属性名)
4)判断属性是否存在
hasattr()
存在,True;不存在,False
注意:attr相关函数可以动态操作对象属性
五、继承
1、继承
继承就是让子类直接用拥有父类的属性和方法
父类是一个大类,子类就是大类中的一个小分类
2、语法
注意:定义类的时候,没有写父类的话默认继承object(基类)
3、在继承拥有父类的同时怎么在子类中添加内容
子类在拥有父类的属性和方法的同时,往往需要有自己的一些属性和方法
添加类属性和方法直接在子类中定义新的属性和新的方法
添加对象属性在子类中__init__方法中写’super().init()’