zoukankan      html  css  js  c++  java
  • 《Python》 面向对象初识(组合)

    一、面向对象(组合):

        定义:给一个类的对象封装一个属性,这个属性是另一个类的对象。

        意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系。

     

      人物使用武器攻击另一个人物:

    class Game_role:
        def __init__(self,name,ad,hp):
            self.name = name
            self.ad = ad
            self.hp = hp
        def attack(self,role):
            role.hp = role.hp - self.ad
            print('%s赤手空拳攻击了%s,%s掉了%s血,%s还剩%s血' % 
                  (self.name,role.name,role.name,self.ad,role.name,role.hp))
    class Weapon:
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
        def attack(self,role1,role2):
            role2.hp = role2.hp - self.ad - role1.ad
            print('%s用%s攻击了%s,%s掉了%s血,%s还剩%s血' % 
                  (role1.name,self.name,role2.name,role2.name,role1.ad + self.ad,role2.name,role2.hp))
    p1 = Game_role('盖伦',20,500)
    p2 = Game_role('剑豪',100,200)
    w1 = Weapon('大宝剑',30)
    w2 = Weapon('武士刀',80)
    p1.attack(p2)   # 盖伦调用攻击方法攻击剑豪
    p2.attack(p1)   # 剑豪调用攻击方法攻击盖伦
    w1.attack(p1,p2)    # 大宝剑调用攻击方法攻击剑豪     这样不好,动作的发起者应该是人而不是武器
    w2.attack(p2,p1)    # 武士刀调用攻击方法攻击剑豪     这样不好,动作的发起者应该是人而不是武器

      但是动作的发起者变成了武器,而不是人物,这样就很不合理啦!

        所以,组合就孕育而生。

      组合的好处:就是能够把一个类的对象与另一个类的对象产生关系,让一个类与另一个类产生关系

    class Gamerole:
        def __init__(self,name,ad,hp):
            self.name = name
            self.ad = ad
            self.hp = hp
        def attack(self,role):
            role.hp = role.hp - self.ad
            print('%s赤手空拳攻击了%s,%s掉了%s血,%s还剩%s血' % 
                  (self.name,role.name,role.name,self.ad,role.name,role.hp))
        def weapon(self,w):     # 给人物封装了一个武器属性,这个属性值是Weapon类的一个对象
            self.weapon1 = w    # 组合
    class Weapon:
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
        def attack(self,role1,role2):
            role2.hp = role2.hp - role1.ad - self.ad
            print('%s用%s攻击了%s,%s掉了%s血,%s还剩%s血' % 
                  (role1.name,self.name,role2.name,role2.name,(role1.ad + self.ad),role2.name,role2.hp))
    p1 = Gamerole('盖伦',20,500)
    p2 = Gamerole('剑豪',100,200)
    w1 = Weapon('大宝剑',30)
    w2 = Weapon('武士刀',80)
    p1.weapon(w1)       # 给盖伦封装大宝剑
    print(p1.weapon1)   # 其实 他就是w1
    p2.weapon(w2)       # 给剑豪封装武士刀
    print(p2.weapon1)   # 其实 他就是w2
    p1.weapon1.attack(p1,p2)    # 盖伦调用大宝剑攻击剑豪
    p2.weapon1.attack(p2,p1)    # 剑豪调用大宝剑攻击盖伦
  • 相关阅读:
    HTML浏览器标题栏如何设置
    阿里团队常用的布局——双飞翼布局
    浏览器兼容性问题——IE不支持却很实用的CSS属性Outline和Child
    css选择器:基本选择器
    编程十年
    解决WX-IOS打开公众号网页出现的底部导航条
    Angular6路由复用与延迟加载的冲突解决——看看有备无患
    Ionic2 + Angular4 + JSSDK开发中的若干问题汇总
    [Linq Expression]练习自己写绑定
    [Linq To Sql]解决join时的Collation冲突
  • 原文地址:https://www.cnblogs.com/yzh2857/p/9531935.html
Copyright © 2011-2022 走看看