python类的命名空间与组合
一、类的命名空间
定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性
-
类的属性有两种形式:静态属性和动态属性
-
静态属性就是在类中定义的变量
-
动态属性就是定义在类中的方法
在调用上我们需要注意的是对象可以调用类中的属性,但是类名不可以调用对象的属性,由于对象和类之间存在一个关联关系所以对象能够找到类,但是类不能找到对象
使用方法:
-
类名.属性 只会寻找类中的静态变量名字
-
对象.属性 会先在对象自己的命名空间中找名字,如果找不到在到类的内存空间中去找;
二、类的组合
什么叫组合:一个类的对象的属性是另一个类的对象,且两个类之间有一种“什么有什么的关系”
组合的例子如下:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/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)