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' 50 10 )
=  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)   # 使用斧头攻击狗

执行输出:

 

转载于:https://www.cnblogs.com/haowen980/p/8810202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值