zoukankan      html  css  js  c++  java
  • 面向对象空间和组合

    面向对象空间和组合

    查询顺序:
    对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找....
    类名.属性 : 先从本类空间找,如果找不到,再从父类找....
    对象与对象之间是互相独立的.



    计算一个类 实例化多少对象.
    class Count:
        count = 0
        def __init__(self):
            Count.count = self.count + 1
     
    obj1 = Count()
    obj2 = Count()
    通过类名可以更改我的类中的静态变量值
    但是通过对象 不能改变只能引用类中的静态变量


    组合练习
    #模拟英雄联盟写一个游戏人物的类(升级题).
    # 要求:
    # (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)

      

  • 相关阅读:
    轻松学习之Linux教程二 一览纵山小:Linux操作系统具体解释
    SpringMVC经典系列-15对SpringMVC的总结---【LinusZhu】
    Testng 的数据源 驱动測试 代码与配置
    怎样统计分析CSDN博客流量
    python小知识点
    Javascript 笔记与总结(2-10)删除节点,创建节点
    C#6.0语言规范(十四) 枚举
    C#6.0语言规范(十三) 接口
    C#6.0语言规范(十二) 数组
    C#6.0语言规范(十一) 结构
  • 原文地址:https://www.cnblogs.com/123zzy/p/9399657.html
Copyright © 2011-2022 走看看