Pythonm面向对象之组合

本文通过Python实现游戏角色与武器的组合使用,展示如何通过类的封装和继承创建游戏对象,包括GameRole类和Weapon类,并演示了角色攻击和装备武器进行战斗的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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)

p1.attack(p2) # 盖伦 攻击 亚索,亚索 掉了20血,还剩180血
p2.attack(p1) # 亚索 攻击 盖伦,盖伦 掉了50血,还剩450血

p1.armament_weapon(axe)
p1.wea.fight(p1, p2) # 盖伦 用倚天剑打了亚索,亚索 掉了60血,还剩120血
p2.armament_weapon(broadsword)
p2.wea.fight(p2, p1) # 亚索 用屠龙刀打了盖伦,盖伦 掉了100血,还剩350血

注意:
1.查询顺序:
对象.属性:先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找。。。
类名.属性:先从本类空间找,如果找不到,再从父类找,。。。

2.对象与对象之间是互相独立的。
3.通过类名可以直接更改本类中的静态变量值
4.但是通过对象不能改变本类中的静态变量值,只能引用类中的静态变量。
5.类名()产生了一个(含有类对象指针的)空间,所以,对象可以访问类中的静态变量和动态变量。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值