18.07.24(查询顺序,组合)

在执行类名()时产生一个含有类对象指针的空间

查询顺序:

(1).对象>属性:先从对象空间找,如果找不到再从类空间找,再找不到再从父类找.

(2).类名>属性:先从本类空间找,如果找不到再从父类空间找

对象和对象之间是互相独立的

例:计算实例化的次数

class Preson:
count = 0
def __init__(self):
Preson.count = Preson.count + 1
obj1 = Preson()
obj2 = Preson()
obj3 = Preson()
print(Preson.count) ==>3

通过类名可以更改类中的静态变量值,但是通过对象不能改变,只能引用类中的静态变量

组合:给一个类的对象封装一个属性,这个属性是另一个类的对象

例:

class GameRole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p):
p.hp = p.hp - self.ad
print("%s攻击了%s,%s掉了%s血,还剩%s血" % (self.name,p.name,p.name,self.ad,p.hp))
def armament_weapon(self,wea):
self.wea = wea

class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def fight(self,p1,p2):
p2.hp = p2.hp - self.ad - p1.ad
print("%s用来%s打了%s,%s掉了%s血,还剩%s血" % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
p1 = GameRole("灰太狼",20,500)
p2 = GameRole("红太狼",50,300)
w1 = Weapon("平底锅",70)
p2.armament_weapon(w1)
p2.wea.fight(p2,p1)
结果:红太狼用来平底锅打了灰太狼,灰太狼掉了70血,还剩380血

猜你喜欢

转载自www.cnblogs.com/gxj742/p/9361661.html