当前位置: 首页 > 面试题库 >

python中的组成和聚合

咸亦
2023-03-14
问题内容

我想知道如何在python中以 UML术语 实现组合和聚合。

如果我了解:

  1. 聚合:

    class B:
    pass

    class A(object):
    def init(self):
    self.B = B

  2. 组成:

在其他语言中,我将其实现为指向B的指针。我猜这self.B是python中的指针。

class A(object):
    def __init__(self, B):
        self.B = B

这样对吗?


问题答案:

如果我正确理解,聚合与组合是关于对象对其成员的职责(例如,如果删除实例,是否还要删除其成员?)。

主要地,它将在很大程度上取决于实施。例如,要创建一个接收类B(聚合)实例的类A,可以编写以下代码:

class B(object): pass

class A(object):
    def __init__(self, b):
        self.b = b

b = B()
a = A(b)

但请注意,Python内置没有任何东西可以阻止您传递其他信息,例如:

a = A("string") # still valid

如果要在A(组成)的构造函数中创建B的实例,则可以编写以下内容:

class A(object):
    def __init__(self):
        self.b = B()

或者,您可以将类注入构造函数,然后创建一个实例,如下所示:

class A(object):
    def __init__(self, B):
        self.b = B()

顺便说一句,至少在第一个示例(可能还有第二个示例)中,您将B设置为B的类定义,而不是它的实例:

class A(object):
    def __init__(self, B):
        self.B = B

>>> a = A()
>>> a.B # class definition
<class __main__.B at 0x028586C0>
>>> a.B() # which you can make instances of
<__main__.B instance at 0x02860990>

因此,最后得到一个A实例,该实例指向B的类定义,我很确定这不是您的追求。虽然,用其他语言通常很难做到这一点,所以我理解这是否是混淆点之一。



 类似资料:
  • 因为聚合和组成是相关的关联,或者我们可以说它给出了对对象或其他任何东西之间关系的理解。 我发布这个问题是因为我在采访中问了一个问题,什么是组成和聚合。 所以根据我的理解,我给出了我的想法,如下所示。 http://www.coderanch.com/t/522414/java/java/Association-Aggregation-Composition 聚集、关联和组合 Java中的关联、聚合

  • 因此,我对UML图中的关联、聚合和组合有一些疑问。以下是一些场景: > 产品评审对产品评审的评级组成。这意味着对于每一个产品评审等级必须有产品评审?如果产品评审不存在,评审评级就没有意义。 客户NRIC协助推车和订货。我们不能使用聚合,因为如果客户不存在,购物车和订单也不存在。 有人能帮我检查一下我的关系是否正确吗?因为我对聚合和关联有点困惑,所以用关联来链接所有的表是好的吗。我不知道什么时候该用

  • 如何识别代码中的组合和聚合?特别是在为现有代码绘制类图时? 我知道组成是“HAS-a”关系,聚合是“PART OF”关系。我知道,在组合子类中,实例将随类一起销毁,而在聚合中则不会。 下面是一个 C/CLI 代码 报警 报警.cpp 据我所知,警报和通知之间的联系是组合,因为没有就没有。我说的对吗?如果我是对的,我怎样才能使这段代码在两个类之间具有聚合关系?请问那里的代码示例? 请帮忙。

  • 我有一个列表 >输入,如下所示: 我试图通过对CURRENCY、PUBLISH_REGION、SOURCE和RECON_STATUS列进行分组来创建另一个列表 >。并将所有唯一状态值作为数据透视添加到输出映射中,并使用JOB_ID_COUNT汇总/聚合计数。 我期待以下响应:输出: 尝试按多个映射字段分组时,我遇到编译时错误。单字段groupingBy工作正常。任何帮助都是非常有效的。

  • 在我的用例中,最简单的集成组件安排是什么: 接收来自多个来源和多种格式的消息(所有消息都是JSON序列化对象)。 将消息存储在缓冲区中最多10秒(聚合) 通过不同的类属性getter(例如class1.someId(),class2.otherId(),...) 释放所有分组的消息并转换为新的聚合消息。 到目前为止(第1点和第2点),我正在使用聚合器,但不知道3)处的问题是否有现成的解决方案或者我

  • 我在读一篇关于OOP中的关系、关联、组合、聚合等的文章。有些事情令人困惑 因此,在PHP中,我们调用以下代码组合 在阅读了几篇关于作文的文章后 以下是组成示例: 因此,根据我的理解,聚合意味着A类的对象可以存在于B类之外,而组合意味着A类生命周期的对象取决于B类。 我正确理解了吗?