知识要点
对象中的组合:给一个类的对象封装一个属性,这个属性是另一个类的对象。
组合的意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系。
例题:
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.
解题一:
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('{}攻击了{},{}掉了{}点的血,还剩{}点的血'
.format(self.name,role.name,role.name,self.ad,role.hp))
p1=Game_role('盖伦',10,100)
p2=Game_role('剑豪',20,80)
p1.attack(p2) # p2 对应的是attack方法中的形参role
解题二:增加使用武器攻击
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('{}攻击了{},{}掉了{}点的血,还剩{}点的血'
.format(self.name,role.name,role.name,self.ad,role.hp))
def fengzwq(self,w): #这里的w是封装另一个类的对象,如p1.fengzwq(w2),那么self(调用者)就拥有了w2的属性,p1.wq就等于w2
self.wq = w
p1=Game_role('盖伦',10,1000)
p2=Game_role('剑豪',20,800)
class Weapon:
def __init__(self,name,ad):
self.name=name
self.ad=ad
def gongji(self,role1,role2):
role2.hp = role2.hp - self.ad
print('{}用{}攻击了{},{}掉了{}点的血,还剩{}点的血'.
format(role1.name,self.name,role2.name,role2.name,self.ad,role2.hp))
w1=Weapon('大宝剑',200)
w2=Weapon('武士刀',500)
p1.fengzwq(w1) # 这一步使p1拥有了W1武器的属性
p1.wq.gongji(p1,p2) # p1.wq 等于武器 w1