""" 1. 关联关系:两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的。关联关系一般长期性的、拥有性的关系,而且双方的关系一般是平等的,如学校与学生之间、老师与学生之间。被关联类B以类的属性形式出现在关联类A中,关联可以是单向的,也可以是双向的。依赖关系与关联关系的区别有动静之分,依赖关系的偶然性和临时性说明了动态性,关联关系的长期性、拥有性静态地展示了对被关联类的引用。 关联关系在代码上体现为四种形式: 1. 单向关联:单向拥有关系,只有一个类知道另一个类的属性和方法 2. 双向关联:双向拥有关系,双方都知道对方的属性和方法 3. 自身关联:自己关联自己,这种情况比较少但也有用到,如链表 4. 多重性关联:表示两个类的对象在数量上的对应关系,多重性可在关联线上用数字范围表示 """ # 关联关系如男女朋友 一对一的关系,单向关联 class Boy(object): def __init__(self, name, girl_friend=None): self.name = name self.girlfriend = girl_friend def happy(self): print(f"[{self.name}]your are happy..?!") def showtime(self): if self.girlfriend: print(f"[{self.name}] 6翻!") else: print("吃狗粮!") class Girl(object): def __init__(self, name, boy_friend=None): self.name = name self.boyfriend = boy_friend def shop(self): if self.boyfriend: print(f"[{self.name}]和男朋友[{self.boyfriend.name}]一起购物!") self.boyfriend.happy() else: print("吃狗粮!") fhb = Boy("fhb") xiaolan = Girl("xiaolan") fhb.girlfriend = xiaolan xiaolan.boyfriend = fhb xiaolan.shop() fhb.showtime() # 关联关系,一对多 比如一个老师有多个学生或者多对多,双向关联 class Teacher(object): def __init__(self, name, lst=None): self.name = name if not lst: self.lst = [] else: self.lst = lst def add(self, stu): self.lst.append(stu) def classroom(self): if self.lst: for s in self.lst: print("name of student: ", s.name) class Student(object): def __init__(self, name, teacher): self.name = name self.teacher = teacher t1 = Teacher("t1") s1 = Student("s1", t1) s2 = Student("s2", t1) t1.add(s1) t1.add(s2) t1.classroom() # 自身关联 class Node(object): def __init__(self): self.next = Node()