组合

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

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


class Gamerole:
    def __init__(self,nickname,ad,hp):
        self.nickname = nickname
        self.ad = ad
        self.hp = hp

    def attack(self,role):
        role.hp = role.hp - self.ad
        print('%s攻击%s,%s掉了%s血,还剩%s血' %\
              (self.nickname,role.nickname,role.nickname,self.ad,role.hp))

    def equip_weaon(self,w):  # 给人物封装了一个武器属性,这个属性值是Weapon类的一个对象
        self.weapon = w   # 组合


class Weapon:
    def __init__(self,name,ad):
        self.name = name
        self.ad = ad
    def fight(self,role1,role2):
        role2.hp = role2.hp - self.ad
        print('%s 用 %s 攻击了%s, %s掉了%s血,还剩%s血'\
              %(role1.nickname,self.name,role2.nickname,role2.nickname,self.ad,role2.hp))

p1 = Gamerole('盖伦',20,500)
p2 = Gamerole('剑豪',100,200)
# p1.attack(p2)
# print(p2.hp)
# w1.fight(p1,p2) # 这样不好,动作的发起者应该是人而不是武器
# w1 = Weapon('大宝剑',30)
# w2 = Weapon('武士刀',80)
# print(w1)
# p1.equip_weaon(w1)
# print(p1.weapon)  #其实 他就是w1
# p1.weapon.fight(p1,p2)
# 让剑豪利用武士刀给盖伦一刀
# p2.equip_weaon(w2)
# p2.weapon.fight(p2,p1)

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

  

01 昨日内容回顾
类:具有相同属性和方法的一类事物
对象:类的具体体现

函数vs面向对象
函数:
封装一个功能
类:
封装多个相关联的功能,功能的集合。
抽象,站在上帝的角度考虑。
公共的模板。
类的结构:
class 类名:
name1 = 'alex' 静态属性
def __init__(self,name,age):
self.name=name self.name 对象的属性名
self.age=age
def func(self): 方法
pass
类名:
操作属性
1,查看类中全部的属性及方法 __dict__
类名.__dict__
2,对某个属性进行删改查,以及增加某个属性,万能的 点.
类名.age = 18
类名.name = 'wusir'
del 类名.name
类名.name

操作方法 尽量不用类名操作方法
类名.func(111)
对象:
如何实例化对象?
obj = 类名('太白',24) 实例化过程,实例化一个对象
内部经历了三个阶段:
1,在内存中开辟一个对象空间,只有一个类对象指针。
2,自动执行__init__方法,并将对象空间传给self。
3,给对象空间封装相应的属性。

1,对象操作对象的属性:
1,对象查看对象的中的所有属性。__dict__
obj.__dict__
2,对象操作对象中的属性。
obj.name 查
obj.sex = '男' 增
obj.name = 'alex'改
del obj.name 删

2,对象查看类中的属性。
obj.name1

3, 对象执行类中的方法:
obj.func()
类名.func(obj)

转载于:https://www.cnblogs.com/xxy614899502/p/9530703.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值