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 今日内容
面向对象
-
楔子
# 游戏公司 # 人狗大战 # 人 : # 名字 性别 职业 等级 血条 武器 攻击力 # 技能 : 搓澡 # 狗 : # 名字 品种 血条 攻击力 # 技能 : 舔 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__