python-17面象对象编程

day16笔记:

  • 文件
    长期存储数据
    单位是字节(byte)
    文件的操作:

    1. 打开文件
    2. 读/写文件
    3. 关闭文件
      释放资源(缓冲区, 内核资源)
      打开文件的函数:
      open(文件路径名, 打开模式)
      方法:
      F.close() 关闭文件
      # 读,仅在’r’模式下可用
      F.read([n]) 读取n个字节/n个字符
      F.readline()
      F.readlines()
      # 写,仅在’w’, ‘x’, ‘a’ 模式下可用
      F.write(字节串/字符串)
      F.writelines([字节串/字符串元素])
      # 以下两个函数通常只对二进制模式文件操作
      F.seek(偏移量,起始位置)
      F.tell() # 得到当前读写位置指针
      F.flush() # 清空缓冲区
  • 打开模式:
    二进制模式: ‘b’
    把文件看成的字节数据,读写时会直接把磁盘数据以字节串形式返回或写入

    文本模式: ‘t’
    把文件看成是字符数据,读写过程中会自动编/解码(默认是’utf-8’),而且会把换行符进行自动转换

  • 汉字编码
    只有两种:
    GB系列(国家标准)
    GB18030(GBK(GB2312))
    UNICODE系列(国际标准)
    UNICODE32(UNICODE16) <–> UTF-8互转

  • 编码字符串:
    ‘gb18030’, ‘gbk’, ‘gb2312’,‘utf-8’, ‘ascii’ …

  • 编码注释:
    # -- coding:gbk --

  • 标准输入输出文件:
    sys.stdin
    sys.stdout
    sys.stderr

day17笔记:

面象对象编程 Object-Oriented Programming

  • 什么是对象
    对象是指现实中的物体或实体(实例)

  • 什么是面象对象
    把一切看成对象(实例…), 用各种对象之间的关系来描述事务

  • 对象都有什么特征:

    • 对象有很多属性(名词,形容词)
      姓名,年龄,性别
    • 对象有很多行为(动作,动词)
      学习,吃饭,睡觉,踢球,工作
  • 什么是类
    拥有相同属性和行为的对象分为一组即为一个类
    类是用来描述对象的工具,用类可以创建此类的对象(实例)

  • 示意:
    车(类) —>> BYD E6(京A.88888) 对象(实例)

    ->> BMW X5(京B.00000) 对象(实例)

  • 狗(类) —> 哈士奇(户籍号: 0000001) 对象

    –> 导盲犬(户籍号: 0000002) 对象

  • int(类) —> 100 对象(实例)

    —> 200 对象(实例)

  • 类的创建语句 class 语句

    • 语法:
      class 类名(继承列表):
      ‘’‘类的文档字符串’’’
      实例方法
      类变量
      类方法(@classmethod)
      静态方法(@staticmethod)
    • 作用:
      创建一个类
      用于描述此类对象的行为和属性
      类用于创建此类的一个或多个对象(实例)
    • 说明:
      类名必须是标识符
      类名实质是变量,它在创建类时绑定一个类
  • 构造函数

    • 调用表达式:
      类名([创建传参列表])

    • 作用:
      创建这个类的实例对象,并返回此实例对象的引用关系

    • 说明:
      实例有自己的作用域和名字空间,可以为该实例添加实例变量(也叫属性)

  • 实例方法(instance method)

    • 定义语法:
    class 类名(继承列表):
        def 实例方法名(self, 形参列表):
            '''方法的文档字符串'''
            语句块
  • 作用:
    用于描述一个对象的行为,让此类型的全部对象都拥有相同的行为
    说明:
1. 实例方法的实质是函数,是定义在类内的函数
2. 实例方法至少有一个形参,第一个形参绑定调用这个方法的实例,一般命名为'self'
  • 实例方法的调用语法:
    实例.实例方法名(调用实参)

    类名.实例方法名(实例, 调用实参)

  • 实例属性: instance attribute
    每个实例都可以有自己的变量.称为实例变量(也叫属性)

  • 使用语法:

    实列.属性名

    • 赋值规则:
      首次赋值则创建此属性
      再次赋值则改变此属性的绑定关系
      作用:
      记录每个对象自身的数据
  • 练习 :
    定义一个"人" 类
    class Human:
    def set_info(self, name, age, adress=‘不详’)
    ‘’‘此方法用来给人对象添加"姓名", "年龄"和"家庭住址"属性’’’
    … # 此处自己实现
    def show_info(self):
    ‘’‘显示此人的信息’’’
    … # 此处自己实现
    调用方法如下:
    s1 = Human()
    s1.set_info(‘小张’, 20, ‘深圳市南山区’)
    s2 = Human()
    s2.set_info(‘小李’, 18)
    s1.show_info() # 小张 20 岁,家庭住址:深圳…
    s2.show_info() # 小李 18 岁,家庭住址:不详

  • del 语句用于删除实例属性
    语法:
    del 对象.实例变量

  • del 语句小结:

    1. 删除变量
      del a, b, c
    2. 删除列表中的元素
      del L[0]
    3. 删除字典的键值对
      del d[‘score’]
    4. 删除对象的属性
      del obj.attr
  • 初始化方法

    • 作用:
      对新创建的对象添加属性

    • 格式:

    class 类名(继承列表):
        def __init__(self, 形参列表):
            语句块

   说明:
    1. 初始化方法名必须为'__init__' 不可改变
    2. 初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入'__init__'方法
    3. 构造函数的实参将通过__init__方法的形参列表传入到'__init__'方法中
    4. 初始化方法必须返回None

  • 练习:
    写一个学生类 Student 类,此类用于描述学生信息
    学生信息有:
    姓名,年龄,成绩(默认为0)

    1. 为该类添加初始化方法,实现在创建对象时自动设置姓名,年龄,成绩属性
    2. 添加set_score方法,能为对象修改成绩信息
    3. 添加show_info方法打印学生信息
      如:
      class Student:
      def init(self, …):

      def set_score(self, score):

      def show_info(self):

      L = []
      L.append(Student(“小张”, 20, 100))
      L.append(Student(“小李”, 18))
      L.append(Student(“小赵”, 19, 85))
      for s in L:
      s.show_info()
      L[1].set_score(70)
      for s in L:
      s.show_info()
  • 析构方法:

    • class 类名(继承列表):
      def del(self):
    • 作用:
      在对象销毁前释放对象占用的资源
    • 说明:
      析构方法会在对象销毁前被自动调用
      python语言建议不要在对象销毁时任何事情,因为销毁的时间难以确定
  • 预置实例属性(实例变量)
    dict 属性
    此属性绑定一个存储此实例自身变量的字典
    示例:

    class Dog:
        pass
    dog1 = Dog()
    print(dog1.__dict__)  # {}
    dog1.kinds = "京巴"
    print(dog1.__dict__)  # {'kinds':'京巴'}
  • __class__属性
    __class__属性绑定创建此实例的类
    • 作用:
      可以借助于此属性来访问创建此实例的类
    class Dog:
        pass
    dog1 = Dog()
    print(dog1.__class__)
    dog2 = dog1.__class__()
    print(dog2.__class__)
  • 面向对象综合练习:
    两个人:
    1. 姓名: 张三, 年龄: 35
    2. 姓名: 李四, 年龄: 8
    • 行为:
      教别人学东西 teach
      赚钱 work
      借钱 borrow
      显示自己的信息 show_info

    • 事情:
      张三 教 李四 学 python
      李四 教 张三 学 王者荣耀
      张三 上班赚了 1000 元钱
      李四 向 张三 借了 200 元钱
      35 岁的 张三 有钱 800 元,它学会的技能是:王者荣耀
      8 岁的 李四 有钱 200 元,它学会的技能是:python

程序如下:

class Human:
    ... 以下自己完成

zhang3 = Human("张三", 35)
li4 = Human("李四", 8)
# 张三 教 李四 学 python
zhang3.teach(li4, "Python")
# 李四 教 张三 学 王者荣耀
li4.teach(zhang3, "王者荣耀")
# 张三 上班赚了 1000 元钱
zhang3.work(1000)
# 李四 向 张三 借了 200 元钱
li4.borrow(zhang3, 200)
# 35 岁的 张三 有钱 800 元,它学会的技能是:王者荣耀
zhang3.show_info()
# 8 岁的 李四 有钱 200 元,它学会的技能是:python
li4.show_info()

  • 用于类的函数:
    isinstance(obj, class_or_tuple) 返回对象obj是否是某个类的对象或者某些类的一个类的对象,如果是返回True,否则返回False
    type(obj) 返回对象的类型(类)
  • 示例:
  isinstance(100, int)  # True
  isinstance(3.14, int)  # False
  class Dog:
      pass
  dog1 = Dog()
  isinstance(dog1, Dog)  # True
  type(dog1) is Dog  # True

  • 修改原学生管理项目
     添加两个功能:
    | 9) 从文件中读取数据(si.txt) |
    | 10) 保存信息到文件(si.txt) |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值