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

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

# 查询顺序:
# 对象.属性:先从对象空间找,如果找不到,再从类空间找,再找不到再从父类找
# 类名.属性:先从本类空间找,如果找不到,再从父类找
类名称空间:在定义类的时候会开辟一个空间,这个空间里面装着所有的类
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

 

posted @ 2018-07-24 15:42  惊世风情  阅读(228)  评论(0编辑  收藏  举报