面向对象,类名称空间,查找顺序,组合

Posted hdy19951010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象,类名称空间,查找顺序,组合相关的知识,希望对你有一定的参考价值。

# 程序从上往下一次把类的静态变量和方法全部加载进一个内存空间,直到遇到类名加括,实例化对象的时候会新开辟一个内存空间,
# (会有一个类对象指针)在对象里面没找到目标会根据指针,去类里面找

# 查询顺序:
# 对象.属性:先从对象空间找,如果找不到,再从类空间找,再找不到再从父类找
# 类名.属性:先从本类空间找,如果找不到,再从父类找
类名称空间:在定义类的时候会开辟一个空间,这个空间里面装着所有的类
class
Person: animal=高级动物 soul=有灵魂 language=语言 def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def eat(self): print(%s,在吃饭 % (p1.name)) p1=Person(张三,18,) print(p1.language) #先从对象空间找,没有找到在去类空间找

 

组合:

# 组合:给一个类的对象封装一个属性,这个属性是另一个类的对象
# 3,模拟英雄联盟写一个游戏人物的类(简单的封装).
# 要求:
# (1)创建一个 Game_role的类.
# (2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
# (3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
# 例: 实例化一个对象 盖伦,ad为10, hp为100
# 实例化另个一个对象 剑豪 ad为20, hp为80
# 盖伦通过attack方法攻击剑豪,此方法要完成 ‘谁攻击谁,谁掉了多少血, 还剩多少血‘的提示功能.

class Game_role:
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))
p1=Game_role(‘盖伦‘,10,100)
p2=Game_role(‘剑豪‘,20,80)
p1.attack(p2)
 

 

(升级)
class Game_role:
    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp
    def men_weapon(self,we):    #定义一个封装武器的方法(接收参数,把武器封装给对象)
        self.we=we      #we接收的就是a1,(相当于赋值,此时we就是封装好的武器)
class Weapon:
    def __init__(self,name,ad):
        self.name = name
        self.ad = ad
    def fight(self,p1,p2):
        p2.hp=p2.hp-self.ad
        print(%s攻击%s,%s掉了%s血,还剩%s血 % (p1.name,p2.name,p2.name,self.ad,p2.hp))
p1=Game_role(盖伦,20,100)
p2=Game_role(剑豪,50,80)
a1=Weapon(大刀,60)
a2=Weapon(小刀,30)
p1.men_weapon(a1)     #组合,在这一步调用封装武器的方法,把武器传给函数进行封装
p1.we.fight(p1,p2)    #这里解释出来就是发起攻击,p1对象使用, we装备好的给p1的武器, fight攻击方法(函数方法) , (p1,p2)是p1攻击p2

 
























以上是关于面向对象,类名称空间,查找顺序,组合的主要内容,如果未能解决你的问题,请参考以下文章

面向对象 名称空间和组合

20180724 (面向对象:类的命名空间和查询顺序丶组合)

面向对象的程序设计

第十篇 面向对象的程序设计

面向对象进阶:命名空间和组合

python类名称空间和对象名称空间