"""
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()