day16 Python 类的关联关系

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

  

posted @ 2018-11-14 19:11  秋风亦冷  阅读(445)  评论(0编辑  收藏  举报