文件操作
python中文件操作原始方式
- 打开文件 f = open(文件路径,文件模式)
- 读取文件 data = f.read()
- 写入文件 f.write(data)
- 关闭文件 f.close()
- 文件模式: r w a rb wb ab
-
#案例
# 文本文件备份
with open('test.txt', 'r', encoding='utf-8') as f_r, open('test_copy.txt', 'w', encoding='utf-8') as f_w:
while True:
line = f_r.readline(1024)
if not line:
break
f_w.write(line)# 二进制文件备份
with open('dd.png', 'rb') as f_r, open('dd_copy.png', 'wb') as f_w:
while True:
line = f_r.read(1024)
if not line:
break
f_w.write(line)
面向对象
封装
-
解释:把属性和方法定义到类中,对外提供公共的接口,这就是封装,例如手机
-
类和对象概念:类是一类事物的统称,抽象的概念,对象是类的具体体现,真实存在的事物
-
二者关系: 先有类再根据类创建对象
-
python类和对象操作格式:
-
定义类的格式>>>class 类名(object):
-
创建对象的格式>>> 对象名=类名()
-
对象调用属性和方法的格式>>>对象名.属性名 对象名.方法名()
-
python中的魔法方法:
-
init() 创建对象的时候自动调用
-
str() 打印对象的时候自动调用
-
del() 删除对象的时候自动调用
-
# 需求: 定义学生类,创建张三和李四对象
# 1.先定义类
class Student(object):
# __init__()方法: 初始化对象的属性 重点
def __init__(self, name, age):
# self就代表对象自己,谁调用当前方法,self就是谁!!!
self.name = name
self.age = age# __str__()方法: 返回打印对象的内容 了解
def __str__(self):
return f"姓名:{self.name},年龄:{self.age}"# __del__()方法: 对象删除的时候自动调用 了解
def __del__(self):
print(f"{self.name}对象被删除了")# 自定义方法
def study(self):
print('好好学习,天天向上')# 2.再根据类创建对象
zs = Student('张三', 18) # 自动调用__init__()
ls = Student('李四', 28) # 自动调用__init__()# 3.默认打印对象打印的是内存地址,如果有str方法,打印的就是方法返回的字符串
print(zs) # 自动调用__str__()方法
print(ls) # 自动调用__str__()方法# 4.对象调用属性
print(zs.name)
zs.study()
print(ls.name)
ls.study()# 默认最后一行代码执行完,程序结束对象就没有用了,GC垃圾回收器自动就会删除对象,自动调用 __del__()方法
继承
- 一个类自动拥有了另外一个类的公有属性和方法,这就是继承关系
- 子类和父类概念:①父类: 被继承的类, 又叫 基类②子类: 继承父类的类, 又叫 派生类③二者关系:子类继承父类 或者 父类派生出子类
- python的继承格式:①单继承class 子类名(父类名):②多继承class 子类名(父类名1,父类名2,父类名3…):
- 重写操作:如果子类从父类继承的属性或者方法,不能满足子类的功能,此时子类就需要重写操作
-
#单继承
# 1.先定义类
# 定义动物类
class Animal(object):
def __init__(self, name):
self.name = namedef jiao(self):
print(f'{self.name}会叫')# 定义狗类
class Dog(Animal):
# 重写,加入了自己特有操作
def jiao(self):
print(f'{self.name}会汪汪叫')# 定义猫类
class Cat(Animal):
# 重写,加入了自己特有操作
def jiao(self):
print(f'{self.name}会喵喵叫')# 2.再根据类创建对象
a = Animal("动物") # 自动调用__init__()
d = Dog('旺财狗')
c = Cat('招财猫')
# 3.对象调用jiao方法
a.jiao()
d.jiao()
c.jiao()# 4.如何查看继承关系(调用方法顺序)
print(Dog.mro())
print(Cat.mro())
#多继承
# 1.先定义类
# 定义Father类
class Father(object):
def skill(self):
print('生活中各种技能')# 定义学校类
class School(object):
def skill(self):
print('AI大模型的技能')# TOOD 多继承
class Student(Father, School):
def skill(self):
# 如果子类想调用父类的同名方法
# super().skill() 只找第一个父类的
# 父类名.skill() 灵活
Father.skill(self)
School.skill(self)# 2.根据类创建对象
s = Student()
s.skill() # 如果两个父类方法重名,优先使用第一个父类的
# 具体查找顺序
print(Student.mro())
print(Student.__mro__)
多态
- 同一种事物,做相同的事情,表现出来的不同状态,这就是多态
- 真正的多态有三大特性(有继承\\有重写\\有父类引用指向子类对象)
- python是动态类型(鸭子类型),所以python的多态是伪多态,不满足三大特性,也能实现多态



