1.初始对象
学习目标:理解使用对象完成数据组织的思路
可以看到加入了登记表后,我们学生所提供的信息就组织的简洁明了
程序中也是有多种多样的方式来记录数据
思考:使用变量记录数据太乱了,如果程序中也和生活中一样:可以设计表格,可以将设计的表格打印出来,可以将打印好的表格供人填写内容,那么数据的组织就非常方便了
将它与我们生活中填写表格做对比
# 1.设计一个类(类比生活中:设计一张登记表) class Student:name = None # 记录学生姓名gender = None # 记录学生性别nationality = None # 记录学生国籍native_place = None # 记录学生籍贯age = None # 记录学生年龄# 2,创建一个对象(类比生活中:打印一张登记表) stu_1 = Student() # 3.对象属性进行赋值(类比生活中:填写表单) stu_1.name = "ikun" stu_1.gender = "男" stu_1.nationality = "中国" stu_1.native_place = "山东省" stu_1.age = 31# 4.获取对象中记录的信息 print(stu_1.name) print(stu_1.gender) print(stu_1.nationality) print(stu_1.native_place) print(stu_1.age)
总体思路是:设计一个类,基于类去创建一个对象,以及通过对象来维护组织数据
优点在于:更加高效,更加的简洁明了
2.成员变量
学习目标:掌握类的定义和使用语法,掌握成员方法的使用,掌握self关键字的作用
就是把类分为:属性(数据),行为(函数)
从今天开始,定义在类内部的函数,称它们为方法,也就是以后提到函数默认它是在函数外部,提到方法就是默认在类内部的函数
一旦在pycharm的类中输入函数,就会默认添加self,self必须要出现在传参的列表中,不管用它都得有。如果想要在成员方法中去访问成员变量,那么需要带上self通过它然后写上一个点,才能访问变量。
注意因为msg是外部参数,所以不用加self
3.类和对象
学习目标:掌握使用类描述现实世界事物的思想,掌握类和对象的关系,理解什么是面向对象
现实世界的事物也有属性和行为,类也有属性和行为。使用程序中的类,可以完美的描述现实世界的事物
类是程序中的设计图纸,对象是基于图纸生产的具体实体
这就是面向对象编程:设计类、基于类创建对象、由对象做具体的工作
import winsound winsound.Beep(2000,3000)
这段代码可以让电脑发出响声
可以听到闹钟响铃了
想构建多少个类对象都可以,没有限制
面向对象编程就是使用对象进行编程,即设计类,基于类创建对象,并使用对象来完成具体的工作
4.构造方法
学习目标:掌握使用构造方法向成员变量赋值
思考:Student()
这个括号,能否像函数(方法)那样,通过传参的形式对属性赋值呢?
可以,需要使用构造方法:__init__()
构建方法的作用:
·构建类对象的时候会自动运行
·构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值
这一部分可以省略,首先这一部分表示定义变量,然后后面是赋值,如果省略后面就代表定义变量
小练习
class Student:name = Noneage = Noneaddress = Nonedef __init__(self,name,age,address):self.name = nameself.age = ageself.address = address i = 0 for x in range(1,11):i += 1print(f"当前录入第{i}位学生信息,总共需要录入10位学生信息")stu = Student(input("请输入学生姓名:"), input("请输入学生年龄:"), input("请输入学生地址:"))print(f"学生{i}信息录入完成,信息为:【学生姓名:{stu.name},年龄:{stu.age},地址:{stu.address}】")
5.其他内置方法
学习目标:掌握几种常见的类内置方法
魔术方法有很多,给大家列举了几个较为常见的
在python中,像这种被四个下划线包围的方法,我们可以称它们为魔术方法
__str__字符串方法
就是说如果你需要把这个类对象变为字符串,它就通过魔术方法的形式去获得要变成什么样的字符串,如果你不写它就直接输出内存地址,如果你写了就按照你写的形式去提供,就是让我们自己来决定输出什么内容。
__lt__小于符号比较方法
就是用来比较大小,可以用来比较小于自然大于也可以
__le__小于等于比较符号方法
可以用于小于等于或大于等于,和__lt__一样就是多了个等于
小于大于不可以
等于可以
__eq__比较运算符实现方法
就是进行相等判断
==符号,如果你没有使用__eq__这个魔术方法,那么等等符号他就默认比较内存地址,那既然是比较内存地址的话,我们是两个独立的对象,那肯定结果都是False
我们可以规定它的标准,就比如说规定年龄相等就是相等,或者是姓名相等就是相等
总结:
__init__ 构造方法,可用于创建类对象的时候设置初始化行为
__str__ 用于实现类对象转字符串的行为
__lt__ 用于2个类对象进行小于或大于比较
__le__ 用于2个类对象进行小于等于或大于等于比较
__eq__ 用于2个类对象进行相等比较
6.封装
学习目标:理解封装的概念,掌握私有成员的使用
面向对象的三大特性:
面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发
面向对象包含三大主要特性:封装,继承,多态
封装表示的是,将现实世界事物的:属性,行为,封装到类中,描述为:成员变量,成员方法,从而完成程序对现实世界事物的描述
就比如手机中,也存在对用户开放的属性和行为,以及对用户隐藏的属性和行为,像这些对用户隐藏的,我们用户是无法使用的
程序中也是,对于私有成员,用户也无法使用
使用私有方法和私有变量,都会报错
class Phone: __current_voltage = 0.5 # 当前手机运行电压 def __keep_single_core(self): print("让CPU以单核模式运行") def call_by_5g(self): if self.__current_voltage >= 1: print("5g通话已开启") else: self.__keep_single_core() print("电量不足,无法使用5g通话,并已设置为单核运行进行省电") phone = Phone() phone.call_by_5g()
私有成员我们的类对象是无法直接使用的,但是它内部的其他成员,却是可以使用的,通俗一点:私有的只可以让我们内部自己使用,到了外部类对象那里,你是没有办法去访问的
思考:私有成员的定义我们已经了解了,但是:它有什么实际的意义吗?
在类中提供内部使用的属性和方法,而不对外开放(类对象无法使用)
小练习:
# 讲解面向对象—封装特性课后练习题 # 设计带有私有成员的手机# 设计一个类,用来描述手机 class Phone:# 提供私有成员变量:__is_5g_enable__is_5g_enable = True # 5g状态# 提供私有成员方法:__check_5g()def __check_5g(self):if self.__is_5g_enable:print("5g开启")else:print("5g关闭,使用4g网络")# 提供公开成员方法:call_by_5g()def call_by_5g(self):self.__check_5g()print("正在通话中") phone = Phone() phone.call_by_5g()
就是相当于对于用户使用手机,用户只需要打电话就可以了,但是打电话前需要检测网络,这些检测交给我们私有成员完成就可以了,不需要用户再去检测。