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
|
A
=
Dog(
'笨笨'
,
'teddy'
,
50
,
10
)
B
=
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(
'斧头'
,
1000
,
100
,
1
)
# 斧头
|
二、组合实例
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'
,
'不详'
,
1
,
5
)
boss_jin
=
Person(
'金老板'
,
'女'
,
20
,
50
)
teddy
=
Dog(
'笨笨'
,
'teddy'
,
50
,
10
)
axe
=
Weapon(
'斧头'
,
1000
,
100
,
1
)
# 斧头
alex.pay()
# 充值
alex.wear(axe)
# 装备武器斧头
alex.arms.skill(teddy)
# 使用斧头攻击狗
|
执行输出: