python_17_day

今日主要内容:

  • 1.类空间,对象空间,查询顺序.
  • 2.组合.

1.类空间,对象空间,查询顺序.

  1. class Person:
  2. animal = '高级动物'
  3. soul = '有灵魂'
  4. language = '语言'
  5.  
  6. def __init__(self, country, name, sex, age, hight):
  7. self.country = country
  8. self.name = name
  9. self.sex = sex
  10. self.age = age
  11. self.hight = hight
  12.  
  13. def eat(self):
  14. print('%s吃饭' % self.name)
  15.  
  16. def sleep(self):
  17. print('睡觉')
  18.  
  19. def work(self):
  20. print('工作')
  21.  
  22. Person.__dict__['sleep'](111)
  23.  
  24. p1 = Person('菲律宾','alex','未知',42,175)
  25. p2 = Person('菲律宾','alex','未知',42,175)
  26. p3 = Person('菲律宾','alex','未知',42,175)
  27. p1.animal = '禽兽'
  28. print(p1.animal)
  29.  
  30. print(Person.name)
  31. p2 = Person('美国','武大','男',35,160)
  1. 查询顺序:
    对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找....
    类名.属性 : 先从本类空间找,如果找不到,再从父类找....
  2.  
  3. 对象与对象之间是互相独立的.
  4.  
  5. 2.组合
    组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.

**模拟英雄联盟写一个游戏人物的类(升级题).(见昨日作业)
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.

  1. 版本一:添加武器:斧子,刀,枪,棍,棒...,
  1. class GameRole:
  2. def __init__(self, name, ad, hp):
  3. self.name = name
  4. self.ad = ad
  5. self.hp = hp
  6.  
  7. def attack(self,p):
  8. p.hp = p.hp - self.ad
  9. print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
  10.  
  11. class Weapon:
  12. def __init__(self,name,ad):
  13. self.name = name
  14. self.ad = ad
  15. def fight(self,p1,p2):
  16. p2.hp = p2.hp - self.ad
  17. print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
  18. % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
  19.  
  20. p1 = GameRole('张三',20,500)
  21. p2 = GameRole('李四',50,200)
  22. axe = Weapon('三板斧',60)
  23. broadsword = Weapon('屠龙宝刀',100)
  24.  
  25. axe.fight(p1,p2)
  26. broadsword.fight(p2,p1)
  27.  
  28. p1.attack(p2)
  1. 代码不合理: 人物利用武器攻击别人,你的动作发起者是人,而不是武器.
  2.  
  3. 版本二:
  1. class GameRole:
  2. def __init__(self, name, ad, hp):
  3. self.name = name
  4. self.ad = ad
  5. self.hp = hp
  6.  
  7. def attack(self,p):
  8. p.hp = p.hp - self.ad
  9. print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
  10.  
  11. def armament_weapon(self,wea):
  12. self.wea = wea
  13.  
  14. class Weapon:
  15. def __init__(self,name,ad):
  16. self.name = name
  17. self.ad = ad
  18. def fight(self,p1,p2):
  19. p2.hp = p2.hp - self.ad
  20. print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
  21. % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
  22.  
  23. p1 = GameRole('张三',20,500)
  24. p2 = GameRole('李四',50,200)
  25. axe = Weapon('三板斧',60)
  26. broadsword = Weapon('屠龙宝刀',100)
  27. # print(axe)
  28. p1.armament_weapon(axe) # 给张三 装备了三板斧这个对象.
  29. # print(p1.wea)
  30. # print(p1.wea.name)
  31. # print(p1.wea.ad)
  32. p1.wea.fight(p1,p2)

  1. 2018-07-24 20:18:43
  1.  

python全栈开发-面向对象-初识2的更多相关文章

  1. python全栈开发-面向对象-初识

    python_16_day 函数总结: https://www.processon.com/view/link/5b718274e4b0555b39e1055f 面向过程的程序设计的核心是过程(流水线 ...

  2. Python全栈开发:初识Python

    Pythton简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...

  3. 【python全栈开发】初识python

    本人最开始接触python是在2013年接触,写过hello word!在此之前对开发类没有多大兴趣,不知道重要性,属于浑浑噩噩,忙忙乎乎,跌跌撞撞的.随后选择了Linux运维作为就业主攻方向. 经过 ...

  4. python全栈开发-面向对象-进阶2

    python_day_19 今日主要内容: 1.抽象类,接口类 2.多态 3.封装 1.抽象类,接口类 python 没有接口这个概念接口类,抽象类: 制定一个规范. 举个栗子:你的项目经理提一个需求 ...

  5. python全栈开发-面向对象-进阶

    python_day_18 1,面向对象的三大特性是什么?继承,多态,封装2,什么是面向对象的新式类?什么是经典类?凡是继承object类都是新式类.凡是不继承object类都是经典类.3,面向对象为 ...

  6. 巨蟒python全栈开发django2:初识django

    今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...

  7. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  8. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  9. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

随机推荐

  1. selenium通过python字典获取配置

    python字典默认的是string item={"browser " : 'webdriver.irefox()', 'url' : 'http://xxx.com'} 如果这样 ...

  2. cesium.js 设置缩放最大最小限制

    viewer.scene.screenSpaceCameraController.minimumZoomDistance = 1200;viewer.scene.screenSpaceCameraCo ...

  3. Multiplication in PyTorch

    1. Element-wise Multiplication * torch.Tensor.mul() torch.mul() 2. Matrix Multiplication torch.Tenso ...

  4. 【luogu P1606 [USACO07FEB]荷叶塘Lilypad Pond】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1606 这个题..第一问很好想,但是第二问,如果要跑最短路计数的话,零边权的花怎么办? 不如这样想,如果这个点 ...

  5. [NOIP2016]换教室(概率期望$DP$)

    其实吧我老早就把这题切了--因为说实话,这道题确实不难啊--李云龙:比他娘的状压DP简单多了 今天我翻以前在Luogu上写的题解时,突然发现放错代码了,然后被一堆人\(hack\)--蓝瘦啊\(ORZ ...

  6. 处理Model

    将Model对象归档解档 - CSDN博客 iOS archive(归档)的总结 - 苹果吧 - 博客园 IOS数据持久化之归档NSKeyedArchiver,iosnskeyedarchiver_I ...

  7. CentOS6安装各种大数据软件 第十章:Spark集群安装和部署

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  8. Hadoop启动dataNode失败,却没有任何报错

    问题描述: centos7,伪分布模式下,启动datanode后,通过JPS查看发现没有相关进程,在日志文件里也没有任何提示.通过百度,网上一堆说什么vesion 的ID不一致,不能解决我的问题. 经 ...

  9. 小白的Unity5之路(一)

    Player移动: public float speed = 6f; Vector3 movement; Rigidbody playerRididbody; void FixedUpdate () ...

  10. MySQL用户账户管理/权限管理/资源限制

    MySQL 的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了. mysql 的权限体系大致分为5个层级: ...