欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

类与类之间的关系

程序员文章站 2023-04-03 14:34:58
一、依赖关系 在方法中给方法传递一个对象 此种关系,类与类之间的关系是最轻的 二、关联关系 两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的 一对多:一的一方埋集合,多的一方埋实体 1) 一对一关系 2) 一对多关系 三、继承关系 在具体继承关系中,访问方法时,self永远都是指向创 ......

一、依赖关系

  • 在方法中给方法传递一个对象
  • 此种关系,类与类之间的关系是最轻的
# 植物大战僵尸
class plant(object):
    """
    植物类
    """
    def __init__(self, name, attack, hp):
        """
        初始化
        :param name:植物名
        :param attack: 攻击力
        :param hp: 血量
        """
        self.name = name
        self.attack = attack
        self.hp = hp

    def fight(self, zombie):
        """
        攻击js,使js掉血
        :param js: 攻击对象
        :return: none
        """
        zombie.hp -= self.attack


class zombie(object):
    """
    僵尸类
    """
    def __init__(self, name, hp, attack):
        """
        初始化
        :param name: 僵尸名
        :param hp: 血量
        :param attack: 攻击力
        """
        self.name = name
        self.hp = hp
        self.attack = attack

    def eat(self, plant):
        """
        僵尸吃plant
        :param plant: 吃的对象
        :return: none
        """
        plant.hp -= self.attack


lvluo = plant("绿萝", 20, 100)
js1 = zombie("僵尸1号", 100, 5)

lvluo.fight(js1)
js1.eat(lvluo)

print(lvluo.hp)  # 95
print(js1.hp)    # 80

 

二、关联关系

  • 两种事物必须是互相关联的,但是在某些特殊情况下是可以更改和更换的
  • 一对多:一的一方埋集合,多的一方埋实体

1)  一对一关系

class person(object):
    """
    person类
    """
    def __init__(self, name, id=none):
        """
        初始化
        :param name: 姓名
        :param id: 身份证号码
        """
        self.name = name
        self.id = id

    def display(self):
        """
        展示有无身份证
        :return: none
        """
        if self.id:
            print("我叫%s, 我的身份证号码为%s" % (self.name, self.id))
        else:
            print("我未成年,没有身份证!!!")


class id(object):
    """
    id类
    """
    def __init__(self, name, num):
        """
        初始化
        :param name: 姓名
        :param num: 身份证号
        """
        self.name = name
        self.num = num


p_id = id("tom", 123456789)
p1 = person("tom", p_id.num)
p1.display()  # 我叫tom, 我的身份证号码为123456789

2) 一对多关系

class teacher(object):
    """
    teacher类
    """
    def __init__(self, name, lst=none):
        """
        初始化
        :param name: 姓名
        :param lst: 学生列表
        """
        self.name = name
        if lst == none:
            self.lst = []
        else:
            self.lst = lst

    def add(self, student):
        """
        添加学生
        :param student: 学生对象
        :return: none
        """
        self.lst.append(student)

    def display(self):
        """
        打印学生姓名
        :return: none
        """
        for el in self.lst:
            print(el.name)


class student(object):
    """
    student类
    """
    def __init__(self, name, num):
        """
        初始化
        :param name: 姓名
        :param num: 学号
        """
        self.name = name
        self.num = num

# 创建对象
t = teacher("tom")
s1 = student("andy", 1)
s2 = student("linda", 2)

# 把学生添加给老师
t.add(s1)
t.add(s2)

t.display()

结果:
andy
linda

 

三、继承关系

  • 在具体继承关系中,访问方法时,self永远都是指向创建对象时的对象。
class base(object):
    def __init__(self, num):
        self.num = num
    
    def func1(self):
        print(self.num)


class foo(base):
    pass

obj = foo(123)  # 调用__init__方法,自己没有,找父类
obj.func1()  # 123

 next:

class base(object):
    def __init__(self, num):
        self.num = num

    def func1(self):
        print(self.num)
        self.func2()

    def func2(self):
        print("base.func2")


class foo(base):

    def func2(self):
        print("foo.func2")


obj = foo(123)
obj.func1()


结果:
123
foo.func2

 next:

class base(object):
    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.func1()


结果:
1
111 1
2
111 2
3
222 3