13.封装继承多态
01.封装
- 封装:提高程序的安全性,将数据(属性)和行为(方法)包装到类对象中。
- 继承:提高代码的复用性
- 多态:提高程序的可扩展性和可维护性
封装的实现:
class Student: def __init__(self,name,age): self.name=name self.__age=age #年龄不希望在类的外部被使用,所以加了两个_ def show(self): print(self.name,self.__age) stu=Student('张三',20) stu.show() #在类的外面使用name与age print(dir(stu)) print(stu._Student__age)
02.继承
继承:
- 如果一个类没有继承任何类,则默认继承object
- Python支持多继承
- 定义子类时,必须在其构造函数中调用父类的构造函数
class 子类类名 (父类1,父类2): pass
class Person(object): def __init__(self,name,age): self.name=name self.age=age def info(self): print(self.name,self.age) class Student(Person): def __init__(self,name,age,stu_no): super().__init__(name,age) self.stu_no=stu_no class Teacher(Person): def __init__(self,name,age,teachofyear): super().__init__(name,age) self.teachofyear=teachofyear stu=Student('张三',20,'1001') teacher=Teacher('李四',34,23) stu.info() teacher.info()
03.方法重写
class Teacher(Person): def __init__(self,name,age,teachofyear): super().__init__(name,age) self.teachofyear=teachofyear def info(self): super().info() print('教龄是'+self.teachofyear)
04.Object类
Object类:
object类是所有类的父类,因此所有类都有object类的属性和方法。
内置函数dir()可以查看指定对象所有属性
Object有一个_str_()方法,用于返回一个对于"对象的描述",对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常会对__str__()进行重写
05.多态的实现
多态:多态就是‘具有多种形态’,它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。
class Animal(object): def eat(self): print('动物会吃') class Dog(Animal): def eat(self): print('狗吃骨头...') class Cat(Animal): def eat(self): print('猫吃鱼...') class Person: def eat(self): print('人吃五谷杂粮') #定义一个函数 def fun(obj): obj.eat() #开始调用函数 fun(Cat()) fun(Dog()) fun(Animal())
06.特殊属性
- dict:获得类对象或实例对象所绑定的所有属性和方法的字典
x.__dict__
特殊方法:
- len():通过重写_len_()方法,让内置函数len()的参数可以是自定义类型
- add():通过重写_add_()方法,可使用自定义对象具有"+"功能
- new():用于创建对象
- init():对创建的对象进行初始化
07.类的赋值与浅拷贝
#变量的赋值 class CPU: pass cpu1=CPU() cpu2=cpu1
变量的赋值操作:只是形成两个变量,实际上还是指向同一个对象
浅拷贝:Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象
#类的浅拷贝 disk=Disk() computer =Computer(cpu1,disk) #浅拷贝 import copy computer2=copy.copy(computer)
- 深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
#深拷贝 computer3=copy.deepcopy(computer)
14.模块和包
01.模块
模块:
模块英文为Modules
函数与模块的关系(一个模块中可以包含Nduoge函数)
在Python中一个扩展名为.py的文件就是一个模块
使用模块的好处:方便其它程序和脚本的导入并使用
避免函数名和变量名冲突
提高代码的可维护性
提高代码的可重用性
02.模块的导入
创建模块:新建一个.py文件,名称尽量不要与Python自带的标准模块名称相同
导入模块:import 模块名
from 模块名称 import 函数/变量/类
import math #关于数学运算 print(math.pi) from math import pi print(pi)
03.Python中的包
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用:代码规范、避免模块名称冲突
包与目录的区别:包含__init__.py文件的目录称为包
目录里通常不包含_init_.py文件
包的导入
import 包名.模块名
使用from … import可以导入包,模块,变量等等
04.Python中常用的内容模块
sys:与Python解释器及其环境操作相关的标准库
time:提供与时间相关的各种函数的标准库
os:提供了访问操作系统服务功能的标准库
calendar:提供与日期相关的各种函数的标准库
urllib:用于读取来自网上(服务器)的数据标准库
json :用于使用JSON序列化和反序列化对象
re :用于在字符串中执行正则表达式匹配和替换
math:提供标准算数运算函数的标准库
decimal:用于进行精准控制运算精度、有效数位和四舍五入操作的十进制运算
logging:提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能
05.第三方模块的安装及使用
pip install 模块名
import 模块名
import time import schedule def job(): print('哈哈-----') schedule.every(3).seconds.do(job) while True: schedule.run_pending() time.sleep(1)
15.文件读写
01.编码格式介绍
- 常见的字符编码格式
Python的解释器使用的是Unicode(内存)
.py文件在磁盘上使用UTF-8存储(外存)
02.文件读写的原理
- 文件的读写俗称"IO操作"
- 内置函数open()创建文件对象
file=open('a.txt','r') print(file.readlines())//结果是一个列表 file.close()
03.常用的文件打开模式
文件的类型:
文本文件:存储的是普通“字符”文本,默认为unicode字符集,可以使用记事本程序打开
二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,举例:MP3音频文件,jpg图片,doc文档等
r:以只读模式打开文件,文件的指针会放在文件的开头
w:以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针放在文件的开头
a:以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾
b:以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb,或者wb
+:以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+
04.文件对象常用方法
read([size]):从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline():从文本文件中读取一行内容
readlines():把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str):将字符串str内容写入文件
writelines(s_list):将字符串列表s_list写入文本文件,不添加换行符
seek(offset[,whence]):把文件指针移动到新的位置,offset
05.with语句(上下文管理器)
with语句可以自动管理上下文资源,无论什么原因跳出with块,都能保证文件正确的关闭,以此来达到释放资源的目的。
with open('a.txt','r') as file : print(file.read())
文件的复制:
with open('logo.png','rb') as src_file: with open('copy2logo.png','wb') as target_file: target_file.write(src_file.read())
06.os模块的常用函数
- os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
- os模块与os.path模块对于目录或文件进行操作
import os os.system('notepad.exe') #直接调用可执行文件 os.startfile('C://qq.exe')
getcwd():返回当前的工作目录
listdir(path):返回指定路径下的文件和目录信息
mkdir(path[,mode]):创建目录
makedirs(path1/path2…[,mode]):创建多级目录
rmdir(path):删除目录
removedirs(path1/path2…):删除多级目录
chdir(path):将path设置为当前工作目录
os.path模块操作目录相关函数:
abspath(path):用于获取文件或目录的绝对路径
exists(path):用于判断文件或目录是否存在,如果存在返回True,否则返回False
join(path,name):将目录与目录或者文件名拼接起来
splitext():分离文件名和扩展名
basename(path):从一个目录提取文件名
dirname(path):从一个路径中提取文件路径,不包括文件名
isdir(path):用于判断是否为路径
16.学生信息管理系统
功能:
添加学生及成绩信息
将学生信息保存到文件中
修改和删除学生信息
查询学生细腻些
根据学生成绩进行排序
统计学生的总分
01.项目打包
安装第三方模块
pip install PyInstaller
- 执行打包操作
pyinstaller -F E:\video\studentsys\stusystem.py