python全栈学习--Day19(面向对象组合,继承)

Posted 鎵譹_John

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python全栈学习--Day19(面向对象组合,继承)相关的知识,希望对你有一定的参考价值。

python 全栈开发,Day19(组合,组合实例,初识继承)

 

一、组合

表示的一种什么有什么的关系

 

先来说一下,__init__的作用

1
2
3
4
5
6
7
8
9
10
class Dog:
    def __init__(self, name, kind, hp, ad):
        self.name = name  # 对象属性 属性
        self.kind = kind
        self.hp = hp
        self.ad = ad
 
    def bite(self, p):
        p.hp -= self.ad  # 人掉血
        print(\'%s咬了%s一口,%s掉了%s点血\' % (self.name, p.name, p.name, self.ad))

实例化A和B

1
2
= Dog(\'笨笨\'\'teddy\'5010)
= Dog(\'花花\')

A职员是老员工,他知道这个游戏,狗有什么属性。

B是新来的,假如没有__init__方法,B就随便传参数了,但是类方法执行时,会报错。

为了避免这个问题,在__init__方法里面,约束某些属性,必须要传,否则方法执行出错。

 

人狗大战游戏,现在需要增加武器

武器是人的一个属性,比如攻击力,磨损度,价格,名字,品级,技能

增加一个类

1
2
3
4
5
6
7
8
9
10
11
class Weapon:
    def __init__(self, name, price, level, ad):
        self.name = name
        self.price = price
        self.level = level
        self.ad = ad * self.level  # 升级之后,攻击就翻倍了
        self.wear = 20  # 默认的耐久度,实例化时,可以不用传
 
    def skill(self, dog):  # 技能
        dog.hp -= self.ad
        print(\'%s受到了%s点的伤害,%s掉了%s点血\' % (dog.name, self.name, dog.name, self.ad))

实例化一个武器

1
axe = Weapon(\'斧头\'10001001)  # 斧头

 

二、组合实例

1.人狗大战

武器给谁装备呢?武器需要花钱买吧,那么就需要玩家充钱,现在加一个充钱功能

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class Person:
    def __init__(self, name, sex, hp, ad):
        self.name = name  # 对象属性 属性
        self.sex = sex
        self.hp = hp  # 血量
        self.ad = ad  # 攻击力
        self.money = 0  # 金额
        self.arms = None  # 默认武器为None<br>
    def attack(self, d):
        d.hp -= self.ad
        print(\'%s攻击了%s,%s掉了%s点血\' % (self.name, d.name, d.name, self.ad))
 
    def pay(self):  # 充值
        money = int(input(\'请输入您要充值的金额:\'))
        self.money += money
        print(\'您的余额是:%s\' % self.money)
 
    def wear(self, weapon):  # 装备武器
        if self.money >= weapon.price:
            self.arms = weapon  # 组合 给人装备了武器
            self.money -= weapon.price
            print(\'购买成功,您已经顺利装备了%s\' % weapon.name)
        else:
            print(\'余额不足,请充值!\')
 
    def attack_with_weapon(self, dog):  # 拿武器攻击狗
        if \'arms\' in self.__dict__:  # 如果武器属性在实例属性字典里
            self.arms.skill(dog)  # 使用武器攻击狗
        else:
            print(\'请先装备武器\')
 
 
class Dog:
    def __init__(self, name, kind, hp, ad):
        self.name = name  # 对象属性 属性
        self.kind = kind
        self.hp = hp
        self.ad = ad
 
    def bite(self, p):
        p.hp -= self.ad  # 人掉血
        print(\'%s咬了%s一口,%s掉了%s点血\' % (self.name, p.name, p.name, self.ad))
 
 
class Weapon:  # 武器
    def __init__(self, name, price, level, ad):
        self.name = name  # 武器名
        self.price = price  # 价格
        self.level = level  # 等级
        self.ad = ad * self.level  # 升级之后,攻击就翻倍了
        self.wear = 20  # 默认的耐久度,实例化时,可以不用传
 
    def skill(self, dog):  # 技能,攻击狗
        dog.hp -= self.ad  # 狗掉血
        print(\'%s受到了%s点的伤害,%s掉了%s点血\' % (dog.name, self.name, dog.name, self.ad))

实例化武器,玩家购买武器,攻击狗

1
2
3
4
5
6
7
8
alex = Person(\'a_sb\'\'不详\'15)
boss_jin = Person(\'金老板\'\'女\'2050)
teddy = Dog(\'笨笨\'\'teddy\'5010)
axe = Weapon(\'斧头\'10001001)  # 斧头
 
alex.pay()  # 充值
alex.wear(axe)  # 装备武器斧头
alex.arms.skill(teddy)  # 使用斧头攻击狗

执行输出:

 

以上是关于python全栈学习--Day19(面向对象组合,继承)的主要内容,如果未能解决你的问题,请参考以下文章

python全栈学习--Day18(面向对象交互)

Python全栈day26(面向对象进阶)

Python全栈开发-Day6-面向对象编程

2018-07-03-Python全栈开发day24-面向对象设计

Python基础day-19[面向对象:18天附]

Python全栈开发-Day7-面向对象编程2