#简单版本(依赖关系)# class Daxiang():# def open(self,door):# print('我是大象,我想开门')# door.open()# print('谢谢,你帮我开门!!!')## def zhuang(self):# print('门已经开了,那我就进去了')# def close(self,door):# print('我已经进去了,帮我关门')# door.close()# print('谢谢帮我关门,我呀死了')## class Door:# def open(self):# print('我是门,是叫我开门吗?那我开了')## def close(self):# print('我是门,你确定关门吗?马上就关')## D = Door()# gg = Daxiang()# gg.open(D)# gg.zhuang()# gg.close(D)# # 以某个对象为主体,主体要使用副体的某个功能,任何的对象只要拥有这个功能的,都能成为这个副体 》》》 那么主体与副体的关系就是 依赖关系
加强版(依赖关系)
class Zombie: def __init__(self,name,attrack,hp): self.name = name self.attrack = attrack self.hp = hp def Attrack_To_Plant(self,P): P.hp -= self.attrack if P.hp <= 0: print('真惨,你一阵亡') else: print('注意,你还剩余的血量是%s' % P.hp)zicai = Plant('紫菜',10,100) #创建一个植物的对象zombie1 = Zombie('僵尸1',5,100)#创建一个僵尸的对象zicai.Attrack(zombie1) #紫菜攻击僵尸1 一次zicai.Attrack(zombie1) #紫菜攻击僵尸1 一次zicai.Attrack(zombie1) #紫菜攻击僵尸1 一次zicai.Attrack(zombie1) #紫菜攻击僵尸1 一次zombie1.Attrack_To_Plant(zicai)#僵尸攻击紫菜
关联关系
class Person: def __init__(self,name,Bag=None): self.name = name self.bag = Bag def GTA(self): if self.bag: print('%s 你在干啥,还不带上你的%s去干啥'%(self.name,self.bag.name)) else: print('连个包都没有,还能去哪')class BB: def __init__(self,name): self.name = namegg = Person('小明')New_bag = BB('书包')gg.bag = New_baggg.bag = 0gg.GTA()# 关联关系:主体的某个属性 是一个对象(副体) ,这个对象在赋值给主体的属性之后,相当属于主体的一部分,如果主体要使用副体的功能可以直接通过属性找到该对象之后,进行功能的调用就可以了
加强版(关联关系)
class Teacher: def __init__(self,name,lst=None): self.name = name if lst == None: self.lst = [] else: self.lst = lst def Append(self,s): self.lst.append(s)class Student: def __init__(self,No,name,age): self.name = name self.No = No self.age = ageT1 = Teacher('小沈阳')print(T1.name)print(T1.lst)S1 = Student(1,'Luffy',18)S2 = Student(2,'Luffy2',18)S3 = Student(3,'Luffy3',18)S4 = Student(4,'Luffy4',18)T1.Append(S1)T1.Append(S2)for i in T1.lst: print(i.name)
继承关系:self在访问方法时候,现在自己的命名空间查找,如果在自己的命名空间找不到的话,再到父类的命名空间
去查找,如果在父类都还找不到的话,就出相应的报错。
同时注意的是哪个对象一开始进行调用方法的,self就是那个对象,即使对象本身没有该方法,通过继承关系到父类查找
名称相同的方法进行调用的时候,self也没有没有变的
class Base: def __init__(self, num): self.num = num def func1(self): print(self.num) self.func2() def func2(self): print(111, self.num)class Foo(Base): def func2(self): print(222, self.num)lst = [Base(1), Base(2), Foo(3)]for obj in lst: obj.func2()结果:111 1111 2222 3