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 (面向对象:类的命名空间和查询顺序丶组合)

使用 Apollo 客户端的片段组合:约定和样板

17 类的名称空间 查询顺序 组合

组合多个谓词不起作用

python 2018.7.24 类空间,对象空间,查询顺序 ,组合

Relay.js 没有正确解析组合片段