zoukankan      html  css  js  c++  java
  • python学习Day17--名称空间

    一、基本知识点

     1、# 查询顺序: 

      对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找.... 

      类名.属性 : 先从本类空间找,如果找不到,再从父类找....

      对象与对象之间是互相独立的.

    2、组合:给一个类的对象封装一个属性,这个属性是另一个类的对象

      下面通过代码例子进行说明:

     1 版本一:添加武器:斧子,刀,枪,棍,棒...,
     2 class GameRole:
     3     def __init__(self, name, ad, hp):
     4         self.name = name
     5         self.ad = ad
     6         self.hp = hp
     7 
     8     def attack(self,p):
     9         p.hp = p.hp - self.ad
    10         print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
    11 
    12 class Weapon:
    13     def __init__(self,name,ad):
    14         self.name = name
    15         self.ad = ad
    16     def fight(self,p1,p2):
    17         p2.hp = p2.hp - self.ad
    18         print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'
    19               % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
    20 
    21 p1 = GameRole('大阳哥',20,500)
    22 p2 = GameRole('印度阿宁',50,200)
    23 axe = Weapon('三板斧',60)
    24 broadsword = Weapon('屠龙宝刀',100)
    25 axe.fight(p1,p2)
    26 broadsword.fight(p2,p1)
    27 
    28 p1.attack(p2)

      其中不合理的地方是:人物利用武器攻击别人,你的动作发起者是人,而不是武器。其中第8行后人第16行里的p,p1,p2都是对象空间。

     1 # 版本二:
     2 class GameRole:
     3     def __init__(self, name, ad, hp):
     4         self.name = name
     5         self.ad = ad
     6         self.hp = hp
     7 
     8     def attack(self,p):
     9         p.hp = p.hp - self.ad
    10         print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))
    11 
    12     def armament_weapon(self,wea):
    13         self.wea = wea
    14 
    15 
    16 class Weapon:
    17     def __init__(self,name,ad):
    18         self.name = name
    19         self.ad = ad
    20     def fight(self,p1,p2):
    21         p2.hp = p2.hp - self.ad
    22         print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'
    23               % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
    24 
    25 p1 = GameRole('大阳哥',20,500)
    26 p2 = GameRole('印度阿宁',50,200)
    27 axe = Weapon('三板斧',60)
    28 broadsword = Weapon('屠龙宝刀',100)
    29 # print(axe)
    30 p1.armament_weapon(axe)  # 给大阳哥 装备了三板斧这个对象.
    31 # print(p1.wea)
    32 # print(p1.wea.name)
    33 # print(p1.wea.ad)
    34 p1.wea.fight(p1,p2)

      在GameRole类中加入了动态变量armament_weapon,给一个对象属性封装了另一个对象。具体过程如下:

     

     面向对象资料参考:https://www.cnblogs.com/jin-xin/articles/9157737.html

  • 相关阅读:
    C++ 遇到的问题小结
    学习笔记之 初试Caffe,Matlab接口提取feature
    学习笔记之 初试Linux遇到的问题 2015-10-13
    函数式编程
    如何获取select中的value、text、index相关值 && 如何获取单选框中radio值 && 触发事件 && radio 默认选中
    sessionStorage、localStorage技术相关以及商家sid、sbid记录相关、vue相关问题
    二进制数的妙用
    vue中的坑 --- 锚点与查询字符串
    vue-webpack项目中调试的问题
    JSON中的坑
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12294604.html
Copyright © 2011-2022 走看看