080、类与类之间的关系

类与类之间主要存在以下几种关系:

  1. 继承(Inheritance):
    • 继承是面向对象编程的一个基本特征,它允许我们定义一个类(子类或派生类)来继承另一个类(父类或基类)的属性和方法。子类可以拥有父类的所有属性和方法,也可以添加新的属性和方法或重写(Override)继承的方法。继承是一种”is-a“的关系
  2. 关联(Association):
    • 关联是一种has-a”关系。描述了两个或多个类之间的结构关系,表示一个类的对象与另一个类的对象有联系。关联可以是单向的,也可以是双向的。关联可以是简单的,也可以包含一些属性或操作,这些属性或操作描述了对象之间的链接信息。
      所以关联可以分为普通关联或强关联。其中强关联又有聚合和组合两种:
      1. 组合(Composition):
        • 组合是一种“has-a”关系,表示一个类是另一个类的部分或成员。在组合关系中,一个类的对象包含另一个类的对象作为其属性。这种关系通常用于表示整体与部分的关系。
      2. 聚合(Aggregation):
        • 聚合是组合的一种特殊形式,它也是一种“has-a”关系,但聚合关系中的整体与部分之间具有更弱的耦合性。在聚合关系中,部分对象可以独立于整体对象存在,即整体对象的生命周期不会影响到部分对象的生命周期。
  3. 依赖(Dependency):
    • 依赖关系是一种弱关联,它表示一个类依赖于另一个类的定义。在依赖关系中,一个类(依赖者)的变化可能会影响到另一个类(被依赖者),但这种影响是局部的,通常不会导致被依赖者的变化。依赖关系通常通过局部变量、方法参数或返回类型来体现,通俗的说就是一个类的对象作为另外一个类的方法的参数或者返回值。
  4. 接口实现(Interface Implementation):
    • 接口实现不是传统意义上的类与类之间的关系,但它描述了类与接口之间的关系。一个类可以实现一个或多个接口,这意味着该类将提供接口中声明的所有方法的实现。接口是一种特殊的类,它只包含方法的声明而不包含方法的实现。

下面是一个简单的展示了类与类之间关系的示例:

class Animal:  
    """动物基类"""
    def __init__(self, name):  
        self.name = name  
  
    def make_sound(self):  
        raise NotImplementedError("子类必须实现抽象方法")  
  
# 
class Dog(Animal): 
    """狗"""
    def __init__(self, name):  
        super().__init__(name)  
  
    def make_sound(self):  
        return f"{self.name} 叫汪汪!"  
  
class Collar:  
    """项圈"""
    def __init__(self, color):  
        self.color = color  
  
    def describe(self):  
        return f"这是个{self.color} 项圈."  
  
class House:  
    """房子"""
    def __init__(self, address):  
        self.address = address  
        self.residents = []  # 在这里可以有其它类对象,比如Dog对象。这就是聚合,因为Dog是House的一部分,但Dog可以独立于House存在  
  
    def add_resident(self, resident):  
        self.residents.append(resident)  
  
    def describe_residents(self):  
        for resident in self.residents:  
            if isinstance(resident, Dog):  
                print(resident.make_sound())  
  
class Trainer: 
    """训练"""
    def __init__(self):  
        self.dog = None  # 依赖关系,Trainer依赖于Dog来执行训练  
  
    def train(self, dog):  
        self.dog = dog  
        print(f"训练 {dog.name}...")  
  
# 使用

my_dog = Dog("Buddy")  
my_collar = Collar("Blue")  
my_house = House("狗街123号")  
my_trainer = Trainer()  
  
# 组合:将Dog添加到House中  
my_house.add_resident(my_dog)  
my_house.describe_residents()  # 输出 Buddy的叫声  
  
# 依赖:Trainer训练Dog ,my_dog作为my_trainer类中train方法的参数 
my_trainer.train(my_dog)  # 输出 训练 Buddy...  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿游也

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值