一、类的命名空间
定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性
类的属性有两种形式:静态属性和动态属性
静态属性就是在类中定义的变量
动态属性就是定义在类中的方法
在调用上我们需要注意的是对象可以调用类中的属性,但是类名不可以调用对象的属性,由于对象和类之间存在一个关联关系所以对象能够找到类,但是类不能找到对象
使用方法:类名.属性 只会寻找类中的静态变量名字
对象.属性 会先在对象自己的命名空间中找名字,如果找不到在到类的内存空间中去找;
二、类的组合
什么叫组合:一个类的对象的属性是另一个类的对象,且两个类之间有一种“什么有什么的关系”
组合的例子如下:
#!/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)