[ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例:
class Person: def __init__(self, name, hp, aggr, sex): self.name = name self.hp = hp self.aggr = aggr self.sex = sex def hit(self, dog): dog.hp -= self.aggr print('\033[31;1m%s被打,掉了%s的血.\033[0m' %(dog.name, self.aggr)) class Dog: def __init__(self, name, hp, aggr, kind): self.name = name self.hp = hp self.aggr = aggr self.kind = kind def bite(self, person): person.hp -= self.aggr print('\033[31;1m%s被咬,掉了%s的血.\033[0m' %(person.name, self.aggr)) per = Person('kk', 100, 2, 'male') dog = Dog('teddy', 200, 5, 'teddy') per.hit(dog) dog.bite(per)
这时,为了增加游戏的趣味性,我们可以给人物添加一个武器,并且人物可以使用武器发大招:
- 新增武器类;
- 武器必须给人类装配上才能用;
- 大招是武器发动的,因此大招应该是武器的一个方法
- 人类拿着武器发起大招,应该是: 人类.武器.大招
接下来,就将描述转换为代码:
class Person: '''人类''' def __init__(self, name, hp, aggr, sex): self.name = name self.hp = hp self.aggr = aggr self.sex = sex self.price = 0 # 设置人类初始金钱 def hit(self, dog): dog.hp -= self.aggr print('\033[31;1m%s被打,掉了%s的血.\033[0m' % (dog.name, self.aggr)) def get_weapon(self, weapon): '穿戴武器' if self.price > weapon.price: # 购买武器 self.price -= weapon.price self.weapon = weapon # 带上武器 class Dog: '''狗类''' def __init__(self, name, hp, aggr, kind): self.name = name self.hp = hp self.aggr = aggr self.kind = kind def bite(self, person): person.hp -= self.aggr print('\033[31;1m%s被咬,掉了%s的血.\033[0m' % (person.name, self.aggr)) class Weapon: def __init__(self, name, aggr, njd, price): self.name = name self.aggr = aggr self.njd = njd self.price = price def dazhao(self, dog): if self.njd > 0: dog.hp -= self.aggr * 2 print('\033[33;1m【%s】使用武器【%s】,发大招伤害【%s】\033[0m' % (dog.name, self.name, self.aggr * 2)) per = Person('kk', 100, 2, 'male') dog = Dog('teddy', 200, 5, 'teddy') per.hit(dog) dog.bite(per) hit_dog = Weapon('dbg', 20, 3, 998) # 实例化一个武器对象-打狗棒 per.price += 998 # 冲钱才能变强 per.get_weapon(hit_dog) # 人物装备上武器 per.weapon.dazhao() # 人物使用武器发大招
在上面的这个例子中,我们已经使用到了类的组合。
当人物需要发大招的时候,人物通过 get_weapon 方法绑定武器,self.weapon 就是武器,而大招是武器中的一个方法,因此使用:
人物.武器.大招() 这样的调用关系才能使用大招。
组合就是一个对象的属性值是另一个类的对象
练习:
使用类的组合创建讲师类,有两个类 Teacher 和 brith 类
#!/usr/bin/python3 # -*- coding: utf-8 -*- # Author: hkey class Teacher: def __init__(self, name, age, brith): self.name = name self.age = age self.brith = brith class Brith: def __init__(self, year, month, day): self.year = year self.month = month self.day = day brith = Brith(1998, 10, 23) hkey = Teacher('hkey', 20, brith) print(hkey.brith.year) print(hkey.brith.month)