对象的组合就是互可以互相调用创建对象类中的方法

对象的组合:就是一个对象的属性值是另外一个类的对象

一个类的对象作为另一个类对象的属性(就是把一个对象传递进一个类中当作参数 并且这个参数可以传递给对象的 ,一般是直接定义给init,因为init方法的属性是直接可以给对象的,如果定义在其他地方也需要用self来接收)

组合就是让两个类有可以起到关联 可以使用被调用对象的创建类中的方法,组合有两种,一种是在外部创建了对象 然后把你要调用的对象以参数的形式给传递进要调用者,也可以指着把对象定义在类内部就是直接把得到的对象传递进init方法中

 

组合的练习:

做一个人狗大战但是可以购买装备的程序:

class Person(object):
    def __init__(self,name,sex, hp, ad):
        self.name = name
        self.sex = sex
        self.hp = hp
        self.ad = ad
        self.money = 0  #定义一个默认的属性钱数
    #再定义一个人攻击狗的方法
    def attack(self,d):
        d.hp -= self.ad  #被攻击者的血等于攻击者的攻击力
        print('{}攻击了{},{}掉了{}血'.format(self.name,d.name, d.name,self.ad))

        #人想要攻击其他的事物也可以装备物品来攻击 这样就选哟定义一个装备物品的方法
    def wear(self,weapon):
        # self.weapon = weapon
        if self.money >= weapon.price :  #你要先判断一下您的钱数是不是可以足够购买
            self.weapon = weapon
            #您这是装备一个武器 但是武器是有价格的所以您需要把您的钱数减去武器的价格
            self.money -= self.weapon.price
            print('购买成功 您已经装备成功')
        else:
            print('余额不足请充值')

    #装备后你要拿着你装备后的武器去进攻你所要进攻的物品
    def attack_with_weapon(self,dog):
        if 'weapon' in self.__dict__:  #判断你的weapon是不是已经被接收了 定义为自己本身的
            self.weapon.skill(dog) #调用你所组合类的对象的方法
        else :
            print('清先装备武器')


        #你要装备一个装备 但是不能平白无故的装备啊 你必须要进行充值的
    def pay(self):
        money = int(input('请输入您要输入的金额'))
        self.money +=money #本身的钱  一直加上您充值进来的钱
        print('您的余额是%s'%self.money)




class Dog(object):
    def __init__(self, name, kind, hp, ad): #定义一个类的初始化方法
        self.name =name
        self.kind = kind
        self.hp = hp
        self.ad = ad
    def attack1(self, p):  #定义一个狗攻击人的类
        p.hp -= self.ad
        print('{}攻击了{},{}掉了{}血'.format(self.name, p.name,p.name, self.ad))




#定义一个工具类 因为游戏里人是可以装备工具用来攻击其他事物的
class weapon(object):
    def __init__(self,name,price, ad, level):
        self.name = name
        self.price =price
        self.ad =ad
        self.level = level
    def skill(self,dog):
        dog.hp -=self.ad
        print('{}攻击了{},{}掉了{}血'.format(self.name, dog.name, dog.name, self.ad))

#实例化你所创建的类的对象
alex = Person('老王', '', 100, 30)
tendy = Dog('本本', 'teddy', 150,150)
futou = weapon('斧头', 1000, 100,1)


lst = ['攻击','充值','装备武器','使用武器攻击']
while True:
    for index, value in enumerate(lst,1):
        num = int(input('请输入您要选择的序列号'))
        if num == 1 :
            alex.attack(tendy) #让人去攻击狗
        elif num == 2 :
            alex.pay()
        elif num ==3:
            alex.wear(futou)
        elif num ==4 :
            alex.attack_with_weapon(tendy)
        else :
            print('序列号有误')
View Code

相关文章: