python全栈开发-面向对象-初识2
python_17_day
今日主要内容:
- 1.类空间,对象空间,查询顺序.
- 2.组合.
1.类空间,对象空间,查询顺序.
- class Person:
- animal = '高级动物'
- soul = '有灵魂'
- language = '语言'
- def __init__(self, country, name, sex, age, hight):
- self.country = country
- self.name = name
- self.sex = sex
- self.age = age
- self.hight = hight
- def eat(self):
- print('%s吃饭' % self.name)
- def sleep(self):
- print('睡觉')
- def work(self):
- print('工作')
- Person.__dict__['sleep'](111)
- p1 = Person('菲律宾','alex','未知',42,175)
- p2 = Person('菲律宾','alex','未知',42,175)
- p3 = Person('菲律宾','alex','未知',42,175)
- p1.animal = '禽兽'
- print(p1.animal)
- print(Person.name)
- p2 = Person('美国','武大','男',35,160)
- 查询顺序:
对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找....
类名.属性 : 先从本类空间找,如果找不到,再从父类找....- 对象与对象之间是互相独立的.
- 2.组合
组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.
**模拟英雄联盟写一个游戏人物的类(升级题).(见昨日作业)
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.
- 版本一:添加武器:斧子,刀,枪,棍,棒...,
- class GameRole:
- def __init__(self, name, ad, hp):
- self.name = name
- self.ad = ad
- self.hp = hp
- def attack(self,p):
- p.hp = p.hp - self.ad
- print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
- class Weapon:
- def __init__(self,name,ad):
- self.name = name
- self.ad = ad
- def fight(self,p1,p2):
- p2.hp = p2.hp - self.ad
- print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
- % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
- p1 = GameRole('张三',20,500)
- p2 = GameRole('李四',50,200)
- axe = Weapon('三板斧',60)
- broadsword = Weapon('屠龙宝刀',100)
- axe.fight(p1,p2)
- broadsword.fight(p2,p1)
- p1.attack(p2)
- 代码不合理: 人物利用武器攻击别人,你的动作发起者是人,而不是武器.
- 版本二:
- class GameRole:
- def __init__(self, name, ad, hp):
- self.name = name
- self.ad = ad
- self.hp = hp
- def attack(self,p):
- p.hp = p.hp - self.ad
- print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
- def armament_weapon(self,wea):
- self.wea = wea
- class Weapon:
- def __init__(self,name,ad):
- self.name = name
- self.ad = ad
- def fight(self,p1,p2):
- p2.hp = p2.hp - self.ad
- print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
- % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
- p1 = GameRole('张三',20,500)
- p2 = GameRole('李四',50,200)
- axe = Weapon('三板斧',60)
- broadsword = Weapon('屠龙宝刀',100)
- # print(axe)
- p1.armament_weapon(axe) # 给张三 装备了三板斧这个对象.
- # print(p1.wea)
- # print(p1.wea.name)
- # print(p1.wea.ad)
- p1.wea.fight(p1,p2)
- 2018-07-24 20:18:43
python全栈开发-面向对象-初识2的更多相关文章
- python全栈开发-面向对象-初识
python_16_day 函数总结: https://www.processon.com/view/link/5b718274e4b0555b39e1055f 面向过程的程序设计的核心是过程(流水线 ...
- Python全栈开发:初识Python
Pythton简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...
- 【python全栈开发】初识python
本人最开始接触python是在2013年接触,写过hello word!在此之前对开发类没有多大兴趣,不知道重要性,属于浑浑噩噩,忙忙乎乎,跌跌撞撞的.随后选择了Linux运维作为就业主攻方向. 经过 ...
- python全栈开发-面向对象-进阶2
python_day_19 今日主要内容: 1.抽象类,接口类 2.多态 3.封装 1.抽象类,接口类 python 没有接口这个概念接口类,抽象类: 制定一个规范. 举个栗子:你的项目经理提一个需求 ...
- python全栈开发-面向对象-进阶
python_day_18 1,面向对象的三大特性是什么?继承,多态,封装2,什么是面向对象的新式类?什么是经典类?凡是继承object类都是新式类.凡是不继承object类都是经典类.3,面向对象为 ...
- 巨蟒python全栈开发django2:初识django
今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
随机推荐
- selenium通过python字典获取配置
python字典默认的是string item={"browser " : 'webdriver.irefox()', 'url' : 'http://xxx.com'} 如果这样 ...
- cesium.js 设置缩放最大最小限制
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 1200;viewer.scene.screenSpaceCameraCo ...
- Multiplication in PyTorch
1. Element-wise Multiplication * torch.Tensor.mul() torch.mul() 2. Matrix Multiplication torch.Tenso ...
- 【luogu P1606 [USACO07FEB]荷叶塘Lilypad Pond】 题解
题目链接:https://www.luogu.org/problemnew/show/P1606 这个题..第一问很好想,但是第二问,如果要跑最短路计数的话,零边权的花怎么办? 不如这样想,如果这个点 ...
- [NOIP2016]换教室(概率期望$DP$)
其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...
- 处理Model
将Model对象归档解档 - CSDN博客 iOS archive(归档)的总结 - 苹果吧 - 博客园 IOS数据持久化之归档NSKeyedArchiver,iosnskeyedarchiver_I ...
- CentOS6安装各种大数据软件 第十章:Spark集群安装和部署
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
- Hadoop启动dataNode失败,却没有任何报错
问题描述: centos7,伪分布模式下,启动datanode后,通过JPS查看发现没有相关进程,在日志文件里也没有任何提示.通过百度,网上一堆说什么vesion 的ID不一致,不能解决我的问题. 经 ...
- 小白的Unity5之路(一)
Player移动: public float speed = 6f; Vector3 movement; Rigidbody playerRididbody; void FixedUpdate () ...
- MySQL用户账户管理/权限管理/资源限制
MySQL 的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了. mysql 的权限体系大致分为5个层级: ...