python 面对对象基础
程序员文章站
2022-03-26 12:29:10
[TOC] 面向对象基础 面向对象编程(抽象) 回顾一下 面向过程编程(思想 ) 流水线 优点:逻辑清晰(逻辑一步步的,系统) 缺点:扩展性差(上一个函数的输出是下一个函数的输入) 面向对象编程(思想) 对象: 特征和技能的结合体 面对对象编程:一个个对象进行交互 优点:扩张性非常强 缺点:逻辑非常 ......
目录
面向对象基础
面向对象编程(抽象)
回顾一下
面向过程编程(思想 )
流水线
优点:逻辑清晰(逻辑一步步的,系统)
缺点:扩展性差(上一个函数的输出是下一个函数的输入)
面向对象编程(思想)
对象: 特征和技能的结合体
面对对象编程:一个个对象进行交互
优点:扩张性非常强
缺点:逻辑非常复杂
类与对象
类(类别):一系列具有相同特征和技能的对象
现实世界中先有对象,后有类
# 定义学生 # 姓名: 猪瑞星 # 学号: 222222 # 学校: oldboy # 技能:选课,三十六变 # 姓名: 孔悟空 # 学号: 111111 # 学校: oldboy # 技能:选课,七十二变 # 姓名: 雷公 # 学号: 666666 # 学校: oldboy # 技能: 教课,piao # 定义老师 # 姓名: tank # 学校: oldboy # 技能: 教课,piao # 姓名: nick # 学校: oldboy # 技能:教课,看书
python中先有类,再有对象
class 类名(驼峰体): # 定义类,会直接运行类体内的代码 # 定义一系列特征 # 定义一系列方法 对象1 = 类名() # 实例化出对象
给对象定制独有的特征
class oldboystudent: school = 'oldboy' def __init__(self,name,age): self.name = name self.age = age def choose_course(self): print(' is choosing course') stu1 = oldboystudent('gll',18) stu1.school stu2 = oldboystudent('nick',18) stu2.school
对象的属性查找顺序
# 局部存在 class oldboystudent: school = 'oldboy' name ='nick' def __init__(self,name,age): self.name = name self.age = age def choose_course(self): print('is choosing course') stu1 = oldboystudent('gll',18) print(stu1.name) # gll stu2 = oldboystudent('nick',18) print(stu2.name) # nick # 局部找不到 class oldboystudent: school = 'oldboy' name ='nick' def __init__(self,name,age): #self.name = name self.age = age def choose_course(self): print('is choosing course') stu1 = oldboystudent('gll',18) print(stu1.name) # nick stu2 = oldboystudent('nick',18) print(stu2.name) # nick
类与对象的绑定方法
class oldboystudent: school = 'oldboy' def __init__(self,name,age): self.name = name self.age = age def choose_course(self): print(id(self)) #1983522658680 print(self.school) print(f'{self.name} is choosing course') print(name) stu1 = oldboystudent('gll',18) stu1.choose_course() # self 是对象本身 print(id(stu1)) #1983522658680 oldboystudent.choose_course(stu1) # 注: # 针对类而言:choose_course里的self就是传的参数 # 针对对象而言:choose_course里的self就是对象本身
类与数据类型
lis = [1,2,3] lis2 =list([1,2,3]) # 下面两式等同,理解参数self的概念 lis.append(4) # self自动传lis # lis2.append(lis,4) # 手动传lis
对象的高度整合
在类里面封装了一大堆特征/数据,然后又封装了一大堆方法(方法用来专门用来操控这些数据的),并且在这基础上对于不同对象,这些属性和方法有不一样
class animal: def __init__(self,attri,height,weight): self.attri = attri self.height = height self.weight = weight def jiao(self): print('self.attr,'开始叫了') def eat(self): print('self.attri,'开始吃饭了') people = animal('人类',180,140) dog = animal('狗',100,50) people.eat() dog.jiao()