面向对象--类
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血