一、课程导入
在之前的学习中,我们学习了很多知识,列表可以收集变量、字符串等数据,函数可以把一些代码收集到反复使用的单元中,今天我们将学习Python中的类。
二、编程范式
编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程, 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合, 正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。
常见的编程范式分为:面向过程和面向对象
那面向过程和面向对象分别是什么呢?
面向过程:
基本设计思路就是程序一开始是要着手解决一个大的问 题,然后把一个大问题分解成很多个小问题或子过程,这些 子过程再执行的过程再继续分解直到小问题足够简单到可以 在一个小步骤范围内解决。
缺点:一套流水线或者流程就是用来解决一个问题,如果修改代码就都得改变。
面向对象:上帝的思想
开发正规的程序跟那种写个运行一次就扔了的小脚本一个很大不同,你的代码总是需要不断的 更改,不是修改bug就是添加新功能等。面向对象 编程思想更像是一个真实的世界,生活中我们会 将事物分类,通过创建类和对象来描述这个世界。
优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。
三、类的概念
类,即类别,种类。生物有不同的种类,食物也有不同的种类,生活中的各种商品都有不同的种类, 只要被称为一类的物体,他们都有着相似的特征和行为方式,因此类就是有共同特征和行为的事物的总和。
四、对象
# 对象就是一个具体的东西
那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看:
# 在现实世界中:先有对象,再有类 世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念 也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在 # 在程序中:务必保证先定义类,后产生对象 这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类 不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象
描述对象
我会告诉你它看起来像 什么,什么颜色,有多大……
总结:
# 类是具有相同特征的一类事物(人,狗,老虎) # 对象/实例:具体的某一事物
五、实战
类的定义:
class Player: #class 类名:注意类名后面不要括号,类名首字母大写,采用驼峰命名法 类体
创建类的属性和对象
# 在左边创建一个变量, 右边写上类的名称和括 号,得到一个具体对象, 我们称它为类的实例。 class Player: role="people" # 类属性----静态属性 player1=Player() # 创建对象 player2=Player()
python中的对象分类:
给对象定义属性
描述某个对象有什么特征,定义属性:对象.属性名=属性值 ,“.”这个点相当于“的”
player1.height="180cm" player1.weight="70kg"
给对象定义方法
方法就是能做什么,是动作,是一些函数,可以调用方法完成某个工作,用来做某事。
在类中定义的函数,用来作什么,定义时有一个参数self,指的是实例本身
def attack(self): print("出拳攻击") def defence(self): print("立刻闪躲")
调用定义的方法
创建了方法,可以用对象去调用:对象.方法名
player1.attack() player2.defence()
代码整合:
# 创建类,类名采用驼峰体 class Player: # 定义类的属性 role="people" # 定义对象的方法 def attack(self): print("出拳攻击") def defence(self): print("立刻闪躲") # 创建类对象 player1=Player() player2=Player() # 定义对象的属性 player1.height="180cm" player1.weight="70kg" player1.age="26岁" player2.height="165cm" player2.weight="48kg" player2.age="24岁" # 调用定义的方法 player1.attack() player2.defence() print("1号选手的身高,体重,年龄,分别是:",player1.height,player1.weight,player1.age) print("2号选手的身高,体重,年龄,分别是:",player2.height,player2.weight,player2.age)
六、动手实践
创建一个名为Student的类,实例化一个对象,学生有姓名、年龄、年级等属性,定义上学、放学这两个方法。
# 创建一个名为Student的类,实例化一个对象,学生有姓名、年龄、年级等属性,定义上学、放学这两个方法。 class Student: role="student" def go_to_school(self): print("太阳当空照,我们去上学") def after_school(self): print("太阳下山了,我们放学回家了") s1=Student() s2=Student() s1.name="张三" s1.age="12岁" s1.grade="六年级" s2.name="刘二丫" s2.age="10岁" s2.grade="四年级" s1.go_to_school() s2.after_school() print("s1同学的姓名,年龄,年级为:",s1.name,s1.age,s1.grade) print("s2同学的姓名,年龄,年级为:",s2.name,s2.age,s2.grade)
七、总结
# 1.实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结 # 得出来的编程方式类别,即为编程范式。 # 2. Python支持面向过程编程和面向对象编程,这两种编程范式。 # 3.把大问题分解成多个小问题或子过程,是面向过程的编程范式。 # 4.将事物分类,创建类和对象来管理程序是面向对象的编程范式。 # 5.类:具有相同特征和行为的一类事物,创建类时,类名一般大写 # 6.对象:具体的某一个事物,是根据类实例化得到的 # 7.实例化:根据类来创建对象的过程,对象有相同方法,但属性不一定相同 # 8.属性:描述某个对象有什么特征,定义属性:对象.属性名=属性值 # 9.方法:在类中定义的函数,用来做什么,定义时有一参数self,指实例本身