Day 022 面向对象初识

01 今日内容大纲

  • 面向对象
    • 初识面向对象
      • 一种的新的编程思路
      • 一些概念(伴随到面试结束)
      • 一些语法

02 昨日回顾

  • 递归练习

    • 遍历文件夹下的所有文件( 掌 握 )
    • 查看文件夹的总大小( 会 写 )
    • 斐波那契数列练习(看懂并知道实现方法)
    • 三级菜单(看懂并知道实现方法)
    • 算法
      • 二分查找( 有 序 列表中找一个值的位置,问该元素是否存在,不许使用in index 等)[1,2,3,4,5,6,7,8,9,10,27,36,46,58,67]
      • 平均分成两份,在左还是在右
        • 练习:
        • 实现上面功能 用代码实现
  • sys

    • sys.path

    • sys.argv 在执行python脚本的时候 写在python之后的所有内容,形成一个列表

      • 练习:

      • 写一个python脚本,在cmd里执行

        # python xxx.py 用户名 密码 cp 文件路径 目的地址
        # python xxx.py alex sb cp D:\python_22\day22\1.内容回顾.py D:\python_22\day21
        # python xxx.py alex sb rm D:\python_22\day22
        # python xxx.py alex sb rename D:\python_22\day22  D:\python_22\day23
        
    • sys.modules 查看已经加载到内存中的所有模块

  • os

    • 和文件 文件夹相关的

    • 和工作目录相关的

    • 和执行操作系统命令相关的

    • .path系列

    • os.walk

      import os
      g = os.walk('D:\python_22')
      for i in g :
          path,dir_lst,name_lst = i
          print(path,name_lst)
      
  • logging

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

    • 和文件相关的内容
    • 压缩,copy,删除目录...(文件操作的扩展)

03 今日内容

面向对象

  1. 楔子

    # 游戏公司
        # 人狗大战
    # 人 :
        # 名字 性别 职业 等级 血条 武器 攻击力
        # 技能 : 搓澡
    # 狗 :
        # 名字 品种 血条 攻击力
        # 技能 : 舔
    
    alex = {
        'name' : 'alex',
        'sex' : '不详',
        'job' : '搓澡工',
        'level' : 0,
        'hp' : 250,
        'weapon':'搓澡巾',
        'ad':1
    }
    
    white = {
        'name' : '小白',
        'kind' : '泰迪',
        'hp' : 5000,
        'ad' : 249
    }
    
    # 1.你怎么保证所有玩家初始化的时候都拥有相同的属性
    # 2.每来一个新的玩家,我们都去手动创建一个字典,然后向字典中填值
    # 3.人物和狗的技能如何去写
    
    def Person(name,sex,job,hp,weapon,ad,level=0):   # 人模子
        def 搓(dog):
            dog['hp'] -= dic['ad']
            print('%s 攻击了 %s,%s掉了%s点血' % (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('%s 舔了 %s,%s掉了%s点血' % (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'](小白)
    
    
    
    # 面向过程:想要一个结果,写代码,实现计算结果
    # 面向对象开发:有哪些角色? 角色的属性和技能? 两个角色之间是如何交互的
    
    # 复杂的 拥有开放式结局的程序 比较适合使用面向对象开发
        # 游戏
        # 购物
    
  • 初识面向对象

    • 一种的新的编程思路
    • 一些概念(伴随到面试结束)
    • 一些语法
    # 先定义模子,用来描述一列事物
    # 具有相同的属性和动作
    class Person:
        def __init__(self,name,sex,job,hp,weapon,ad):
            #必须叫__init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性
            self.name = name
            self.sex = sex
            self.job = job
            self.level = 0
            self.hp = hp
            self.weapon = weapon
            self.ad = ad
    
    alex = Person('alex','不详','搓澡工','260','搓澡巾',1)  #alex 就是对象 alex = Person()的过程 是通过类获取一个对象的过程
    print(alex,alex.__dict__)
    #<__main__.Person object at 0x000002AF291CFCA0> {'name': 'alex', 'sex': '不详', 'job': '搓澡工', 'level': 0, 'hp': '260', 'weapon': '搓澡巾', 'ad': 1}
    wusir = Person('wusir','male','法师',500,'法杖',1000)
    print(wusir,wusir.__dict__)
    #<__main__.Person object at 0x0000023BD21208E0> {'name': 'wusir', 'sex': 'male', 'job': '法师', 'level': 0, 'hp': 500, 'weapon': '法杖', 'ad': 1000}
    print(alex.name)    #alex
    print(alex.sex)     #不详
    
    # 属性的修改
    alex.name = 'alexsb'
    print(alex.name)    #alexsb
    
    # 属性的增加
    alex.money = 100000
    print(alex.money)   #100000
    print(alex.__dict__)
    #{'name': 'alexsb', 'sex': '不详', 'job': '搓澡工', 'level': 0, 'hp': '260', 'weapon': '搓澡巾', 'ad': 1, 'money': 100000}
    
    #属性的删除
    del alex.money
    print(alex.__dict__)
    #{'name': 'alexsb', 'sex': '不详', 'job': '搓澡工', 'level': 0, 'hp': '260', 'weapon': '搓澡巾', 'ad': 1}
    
    #类名()会自动调用类中的__init__方法
    
    #类和对象之间的关系?
        # 类 是一个大范围 是一个模子 他约束了事物有哪些属性 但是不能约束具体的值
        # 对象 是一个具体的内容 是模子的产物 它遵循了类的约束 同时给属性赋上了具体的值
    
    # Person是一个类:alex wusir 都是这个类的对象
    # 类有一个空间 存储的是定义在class 中的所有名字
    # 每个对象又拥有一个自己的空间,通过对象名.__init__就可以查看这个对象的属性和值
    
    d = {'k':'v'}
    print(d,id(d))
    d['k'] = 'vvvv'
    print(d,id(d))
    # 修改字典/列表中的某个值,或者是对象的某一个属性 都不会影响这个对象/字典/列表所在的内部空间
    
    class Person:   #类名
        def __init__(self,n,s,j,l,h,w,a):
            # 必须叫__init__这个名字,不能改变的,所有的在一个具体的人物出现之后拥有的属性
            self.name = n
            self.sex = s
            self.job = j
            self.level = l
            self.hp = h
            self.weapon = w
            self.ad = a
    
    # 实例化所经历的步骤
        # 1.类名()之后的第一个事儿,开辟一块内存空间
        # 2.调用__init__把空间的内存地址作为self参数传递到函数内部
        # 3.所有与这一个对象需要使用的属性,都需要和self关联起来
        # 4.执行完init中的逻辑之后,self变量会自动的返回到被调用处(发生实例的地方)
    
    # dog类 实现狗的属性 名字 品种 血量 攻击力 都是可以被通过实例化被定制的
    class dog:
        def __init__(self,name,kind,hp,ad):
            self.name = name
            self.kind = kind
            self.hp = hp
            self.ad = ad
    white = dog('皮蛋','柯基',1000,1)
    print(white,white.__dict__)
    print(white.name)
    print(white.kind)
    
    
    # 定义一个圆形类,半径是这个圆形的属性,实例化一个半径为5的圆形,一个半径为10的圆形
        # 完成方法
        # 计算圆形面积
        # 计算圆形周长
    from math import pi
    class Circle:
        def __init__(self,r):
            self.R = r
        def area(self):
            return pi*self.R**2
    
        def perimeter(self):
            return pi*2*self.R
    
    R5 = Circle(5)
    print(R5.__dict__)
    print(R5.area())
    print(R5.perimeter())
    
    R10 = Circle(10)
    print(R10.__dict__)
    print(R10.area())
    print(R10.perimeter())
    
    # 定义一个用户类,用户名和密码是这个类的属性,实例化两个用户,分别有不同的用户名和密码
    class user:
        def __init__(self,username,password):
            self.username = username
            self.password = password
    QQ = user('353913575','lyp19931231')
    print(QQ,QQ.__dict__)
    Weibo = user('18642389641','daaipengge123')
    print(Weibo,Weibo.__dict__)
    
  • 初识方法

    import time
    class Person:
        def __init__(self,name,sex,ad,hp):
            self.name = name
            self.sex = sex
            self.ad = ad
            self.hp = hp
        def person_attack(self,dog):
            dog.hp -= self.ad
            if dog.hp < self.ad:
                print(f'啊啊啊啊啊,{dog.name}被{self.name}咬死了')
                return False
            else:
                print(f'{self.name}咬了一口{dog.name},{dog.name}掉了{self.ad}点血,{dog.name}的剩余血量为{dog.hp}')
    
    class Dog:
        def __init__(self,name,kind,ad,hp):
            self.name = name
            self.kind = kind
            self.ad = ad
            self.hp = hp
        def dog_attack(self,person):
            person.hp -= self.ad
            if person.hp < self.ad:
                person.hp = 0
                print(f'啊啊啊,{person.name}被{self.name}舔死了')
                return  False
            else:
                print(f'{self.name}舔了一口{person.name},{person.name}感觉好痒并掉了{self.ad}点血,{person.name}的剩余血量为{person.hp}')
    
    Mr_Q = Dog('皮蛋','柯基',100,500)
    Bv = Person('柏葳','male',60,450)
    # print(Mr_Q.__dict__)
    # print(Bv.__dict__)
    while 1:
        a = Bv.person_attack(Mr_Q)
        if a == False:
            break
        time.sleep(2)
        b = Mr_Q.dog_attack(Bv)
        if b == False:
            break
        time.sleep(2)
    
    

04 今日总结

  • 面向对象的思想
  • 类 对象实例 实例化
  • 方法 实例变量
  • class语法 __init__方法
  • self.__dict__

05 预习内容

posted @ 2020-08-11 23:08  Redbean1231  阅读(215)  评论(0编辑  收藏  举报