欢迎光临
我们一直在努力

python中的文件操作、面向对象(封装、继承、多态)

文件操作


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 = name

    def 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的多态是伪多态,不满足三大特性,也能实现多态
赞(0)
未经允许不得转载:171主机测评 » python中的文件操作、面向对象(封装、继承、多态)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址