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

  • 相关阅读:
    JMeter参数签名——Groovy工具类形式
    arthas进阶thread命令视频演示
    疫情期间,如何提高远程办公效率
    Groovy中的闭包
    arthas快速入门视频演示
    绑定手机号性能测试
    基于HTTP请求的多线程实现类--视频讲解
    合格的测试经理必备技能
    Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
    Navicat Premium怎么设置字段的唯一性(UNIQUE)?
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12294604.html
Copyright © 2011-2022 走看看