面向对象--类 1.从空间的角度研究类 1.何处添加对象属性 在类的__init__可以添加,在类的方法中也可以添加,在类的外部也可以添加 2.何处添加类的属性 在类的内部,在类的外部 3.对象空间
面向对象--类
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血
?