python面向对象之类的命名空间与组合

一、类的命名空间

  定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性

      类的属性有两种形式:静态属性和动态属性

      静态属性就是在类中定义的变量

      动态属性就是定义在类中的方法

  在调用上我们需要注意的是对象可以调用类中的属性,但是类名不可以调用对象的属性,由于对象和类之间存在一个关联关系所以对象能够找到类,但是类不能找到对象

  使用方法:类名.属性   只会寻找类中的静态变量名字

       对象.属性 会先在对象自己的命名空间中找名字,如果找不到在到类的内存空间中去找;

二、类的组合

  什么叫组合:一个类的对象的属性是另一个类的对象,且两个类之间有一种“什么有什么的关系”

    组合的例子如下:

#!/usr/bin/python
# -*- encodeing:utf-8 -*-
class  Weapon:
    def __init__(self,*args):
        self.name = args[0]
        self.price = args[1]
        self.aggr = args[2]
        self.defense = args[3]
    def kill(self,person,dog):
        print('%s使用了%s技能,击中了%s'%(person.name,self.name,dog.name))
        dog.hp -= self.aggr
        if dog.hp <= 0:
            print('%s被一刀致命'%dog.name)
        else:
            print('%s攻击了%s一次,%s掉了%s血,%s还剩%s血'%(person.name,dog.name,dog.name,self.aggr,dog.name,dog.hp))
class Dog:
    def __init__(self,*args):
        self.name = args[0]
        self.kind = args[1]
        self.aggr = args[2]
        self.hp = args[3]
    def bite(self,person):
        person.hp -= self.aggr
        if person.hp  <= 0:
            print('%s咬了%s,%s被咬死了'%(self.name,person.name,person.name))
            a = input('复活请输入1:')
            if  a == '1':
                b = int(input('请输入充值金额:'))
                if b > 10000:
                    person.hp = 600
                    person.momey = b - 10000
                    print('复活成功,当前血量%s,当前账户余额%s' % (person.hp, person.momey))
        else:
            print('%s咬了%s,%s掉了%s血,%s还剩%s血'%(self.name,person.name,person.name,self.aggr,person.name,person.hp))
class Person:
    def __init__(self,*args):
        self.name = args[0]
        self.sex = args[1]
        self.aggr = args[2]
        self.hp = args[3]
        self.momey = args[4]
        self.weap = args[5]
    def atter(self,dog):
        dog.hp -= self.aggr
        if self.momey >= 2000:
            c = input('是否购买武器,按1购买')
            if c == '1':
                self.momey -= weapon.price
                self.weap = weapon
                print('购买成功,当前余额%s,当前武器%s' % (self.momey, self.weap.name))
                ren.weap.kill(ren,hei)
        if dog.hp >=0 :
            print('%s打了%s,%s掉了%s血,%s还剩%s血'%(self.name,dog.name,dog.name,self.aggr,dog.name,dog.hp))
weapon = Weapon('打狗棍',20000,40000,100)
hei = Dog('小黑','teddy',200,200000)
ren = Person('alex','',1000,600,0,weapon)
flag = True
while flag:
    if ren.hp <= 0 or hei.hp <= 0:
        break
    ren.atter(hei)
    hei.bite(ren)

 

转载于:https://www.cnblogs.com/caoyf1992/p/8522857.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值