来源:python中国网 时间:2020-04-05

  类是对生活的抽象和描述,生活中的事物彼此存在着关联,类与类之间也同样如此。今天介绍面向对象的世界中.类与类中的依赖、关联和组合关系。代码量大的时候,项目复杂的时候经常出现类与类之间纵横交错!

  1、依赖关系

# -*- coding: utf-8 -*-


class Girl:
    def __init__(self,name,p_obj):
        self.name = name
        self.person = p_obj  # laowang对象,name属性是laowang

    def tell_you(self):
        print("告诉你,{0}今晚和{1}约炮".format(self.name,self.person.name))
        

class Man:
    def __init__(self,name):
        self.name = name

    def yue_pao(self,dog_obj):
        print("{0}约炮{1}".format(self.name,dog_obj.name ))


if __name__ == "__main__":

    laowang = Man("laowang")
    girl = Girl("贱人张",laowang)
    girl.tell_you()


告诉你,贱人张今晚和laowang约炮



  2、关联关系

# -*- coding: utf-8 -*-


class Status:
    # 这个类记录两个人的状态

    def __init__(self):
        self.two_man = []  # 追加对象进去

    def say(self, p1_obj, p2_obj):
        self.two_man.append(p1_obj)
        self.two_man.append(p2_obj)
        print("本人要讲{0}和{1}大战的事情" .format(p1_obj.name, p2_obj.name))

    # 两人比武后的结果
    def kill(self):
        if self.two_man:
            print("{0}同归于尽{1}".format(self.two_man[0].name, self.two_man[1].name))
            self.two_man.clear()
        else:
            print("一人战死")

    # 查询对手是否活着
    def get_one(self, obj):
        for i in self.two_man:
            if obj != i:  # 跟传进来的obj不相等,代表找到了另一个人
                return i.name
        else:
            print("两人都死,比武小组无人")


class Person:
    def __init__(self, name,status_obj):
        self.name = name
        self.status = status_obj  # Status类的对象

    def compete(self):
        print("{0}要在英雄大会上和{1}比武".format(self.name, self.status.get_one(self.name)))


status_obj = Status()
p1 = Person("乔峰",status_obj)
p2 = Person("鸠摩智",status_obj)
# 两人加入列表
status_obj.say(p1 ,p2)  # 2个人组合预备比武
# 两人要比试
p1.compete()
# kill对方
p1.status.kill()  # 一人战死
p1.status.get_one(p2) # p1查询一下
p2.status.get_one(p2) # p2查询下

本人要讲乔峰和鸠摩智大战的事情
乔峰要在英雄大会上和乔峰比武
乔峰同归于尽鸠摩智
两人都死,比武小组无人
两人都死,比武小组无人



  3、组合关系(当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好)

# -*- coding: utf-8 -*-


class Desk:
    def __init__(self, color):
        self.color = color


class Computer:
    def __init__(self, price):
        self.price = price


class House:
    def __init__(self, master, desk, computer):
        self.name = master
        self.desk = desk
        self.course = computer

    def say(self):
        print('房屋主人是{1}的电脑价格是{0}元'.format(self.course.price,self.name))


if __name__ == "__main__":
    desk_obj = Desk('黄色')
    computer_obj = Computer(6000)
    p1 = House('laowang',desk_obj,computer_obj)
    p1.say()

房屋主人是laowang的电脑价格是6000元