面向对象--类

面向对象--类

1.从空间的角度研究类

1.何处添加对象属性
  在类的__init__可以添加,在类的方法中也可以添加,在类的外部也可以添加
    
2.何处添加类的属性
  在类的内部,在类的外部
    
3.对象空间和类空间的关系
查询顺序:
对象.名字:对象空间->类对象指针->类空间->父类空间
类名.名字:类空间->父类空间
对象空间与类空间有相同的名字,对象,先从对象空间找

2.类与类的关系

1.依赖关系(主从之分)
将一个类的类名或者对象传入另一个类的方法中

class Elephant:
    def __init__(self,name):
        self.name = name
    def open(self,obj):
        print(f"{self.name} 1 2 3 开门")
        obj.be_open()
    def close(self):
        print(f"{self.name} 3 2 1 关门")
        
class Refrigerator:
    def __init__(self,name):
        self.name = name
    def be_open(self):
        print(f"{self.name}冰箱被打开了")
    def be_colse(self):
        print(f"{self.name}冰箱被关闭了")
        
qiqi = Elephant("奇奇")
haier = Refrigerator("海尔")
qiqi.open(haier)

#奇奇 1 2 3 开门
#海尔冰箱被打开了

2.组合关系
给一个类的对象封装一个属性,此属性为另一个类的对象

class Boy:
    def __init__(self,name,gf = None):
        self.name = name
        self.gf = gf
    def dinner(self):
        if self.gf:
            print(f"{self.name}请女朋友{self.gf}一起烛光晚餐")
        else:
            print("单身狗不吃饭")
            
qiqi = Boy("奇奇")
qiqi.dinner()
#单身狗不吃饭

qiqi = Boy("奇奇")
qiqi.gf = "六六"   #gf为一个字符串的数据
qiqi.dinner()
#奇奇请女朋友六六一起烛光晚餐


class Boy:
    def __init__(self,name,gf = None):
        self.name = name
        self.gf = gf
    def dinner(self):
        if self.gf:
            print(f"{self.name}请他的{self.gf.age}岁的女友{self.gf.name}一起烛光晚餐")
        else:
            print("单身狗不吃饭")
    def gf_skill(self):
        print(f"{self.name}的女朋友技能:")
        self.gf.skill()
        
class Girl:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def skill(self):
        print(f"{self.name}会直播")
        
qiqi = 	Boy("奇奇")
liuliu = Girl("六六",18)
qiqi.gf = liuliu
qiqi.dinner()
#奇奇请他的18岁的女友六六一起烛光晚餐
qiqi.gf_skill()
#奇奇的女朋友技能:
#六六会直播

              
class GameRole:
    def __init__(self,name,ad,hp):
        self.name = name 
        self.ad = ad
        self.hp = hp
class Weapon:
    def __init__(self,name,ad):
    	self.name = name
        self.ad = ad
    def weapon_attack(self,p1,p2):
    	p2.hp -= self.ad
        print(f"{p1.name}利用{self.name}给了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
        
gailun = GameRole("盖伦",10,100)
xin = GameRole("赵信",20,80)
sword = Weapon("宝剑",15)
musket = Weapon("长枪",30)
sword.weapon_attack(gailun,xin)
#盖伦利用宝剑给了赵信一下,赵信掉了15血,还剩65血
#1.功能虽然实现了,但是逻辑上不合理,应该是人物对象调用方法
#2.游戏人物本身就应该绑定武器属性



class GameRole:
    def __init__(self, name, ad, hp):
        self.name = name
        self.ad = ad
        self.hp = hp
    def equipment_wea(self,wea):
        self.weapon = wea


class Weapon:
    def __init__(self, name, ad):
        self.name = name
        self.ad = ad

    def weapon_attack(self, p1, p2):
        p2.hp -= self.ad
        print(f"{p1.name}利用{self.name}给了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")


gailun = GameRole("盖伦", 10, 100)
xin = GameRole("赵信", 20, 80)
sword = Weapon("宝剑", 15)
musket = Weapon("长枪", 30)
gailun.equipment_wea(sword)
gailun.weapon.weapon_attack(gailun, xin)
#盖伦利用宝剑给了赵信一下,赵信掉了15血,还剩65血

posted @ 2019-08-05 21:26  Bugbiss  阅读(105)  评论(0编辑  收藏  举报