递归,面向对象初识

  1. 递归练习

    • 遍历文件夹下的所有文件

    • 查看文件夹的大小

    • 斐波那契数列的练习

    • 三级菜单

    • 二分查找(未讲):从有序列表中找到某个元素及索引

      • [1,2,3,4,5,6,7,8,9,10,27,38,49,58,63]
  2. sys

    • sys.path
    • sys.argv:在执行python脚本的时候 加载python之后的所有内容,形成一个列表
    • sys.modules:已经加载到内存中的所有模块
  3. os模块

    • 和文件 文件夹相关的
    • 和工作目录相关的
    • 和执行操作系统命令相关的
    • .path系列
  4. logging

    • 排错 数据分析,操作审计
    • 普通输出(文件/屏幕)
    • 切分日志(时间/文件大小)
  5. shutil

    • 和文件相关的内容
2.今日内容
  1. 面向对象

    • 初始面向对象:复杂的 拥有开放式结局的程序 比较适合使用面向对象开发

      • 一种新的编程思路
      • 一些概念
      • 一些语法
    • 楔子

      • 游戏公司:人狗大战

      • 角色:人:名字、性别、职业、等级、血条、武器、攻击力。技能:搓澡

        ​ 狗:名字、品种、血条、攻击力。技能:

        # alex = {
        #     'name':'alex',
        #     'sex':'不详',
        #     'job':'搓澡工',
        #     'level':0,
        #     'hp':'250',
        #     'weapon':'搓澡巾',
        #     'ad':1
        # }
        # xiaohei = {
        #     'name':'xiaohei',
        #     'kind':'泰迪',
        #     'hp':5000,
        #     'ad':249,
        # }
        
        
        def Person(name,sex,job,hp,weapon,ad,level=0):
            def 搓(dog):  # 此函数不是一个公共的函数,是一个有归属感的函数
                dog['hp'] -= dic['ad']
                print(f"{dic['name']}攻击了{dog['name']},{dog['name']}掉了{dic['ad']}滴血")
            dic = {
                'name': name,
                'sex': sex,
                'job': job,
                'level': level,
                'hp': hp,
                'weapon': weapon,
                'ad': ad,
                'action':搓
            }
            return dic
        
        def Dog(name,kind,hp,ad):
            def 咬(person):
                person['hp'] -= dic['ad']
                print(f"{dic['name']}咬了{person['name']},{person['name']}掉了{dic['ad']}滴血")
            dic = {
            'name':name,
            'kind':kind,
            'hp':hp,
            'ad':ad,
            'action':咬
            }
            return dic
        
        alex = Person('alex','不详','搓澡工',250,'搓澡巾',1)
        wusir = Person('wusir','male','法师',500,'打狗棒',1000)
        小白 = Dog('小白','泰迪',5000,249)
        小黑 = Dog('小黑','柯基',10000,499)
        
        小白['action'](alex)
        alex['action'](小白)
        
  2. 面向对象编程

    1. 先来定义一个模子,用来描述一类具有相同属性和动作的事物

      class Person:   # 类名
          def __init__(self):
              # 必须叫__init__这个名字,不能改变,所有的在一个具体的人物出现之后拥有的属性都可以写在这里
              print('_'*20)
              self.name = 'alex'
              self.sex = '不详'
              self.job = '搓澡工'
              self.level = 0
              self.hp = 250
              self.weapon = '搓澡巾'
              self.ad = 1
              print('*'*20)
          # print('in person')
      alex = Person()   # alex 就是对象  alex = Person的过程:通过类获取一个对象的过程 - 实例化
      # 类名() 会自动地调用类中的__init__方法
      
    • 类名() 会自动地调用类中的__init__方法

      1. 类和对象之间关系
        • 类是一个大范围 是一个模子,它约束了事物有哪些属性,但不能约束具体的值
        • 对象是一个具体的内容,是母子的产物,它遵循了类的约束,同时给类赋上具体的值
      2. 运行过程(类有一个空间:存储的是定义在class中所有类的名字,每个对象又拥有自己的空间,通过对象.__dict__就可以这个对象的属性和值)

      递归,面向对象初识

    • 实例化所经历的步骤:

      1. 类名() 之后的第一件事:开辟一块内存空间
      2. 调用__init__方法把内存空间地址作为self参数传递到函数内部
      3. 这个对象需要使用的属性都需要和self关联起来
      4. 执行完init的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)
上一篇:我的高精度模板


下一篇:类封装