18.07.24(查询顺序,组合)
Posted gxj742
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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血
以上是关于18.07.24(查询顺序,组合)的主要内容,如果未能解决你的问题,请参考以下文章
20180724 (面向对象:类的命名空间和查询顺序丶组合)