私が正しく理解していれば、集約と構成は、オブジェクトのメンバーに対する責任に関するものです (たとえば、インスタンスを削除すると、そのメンバーも削除されますか?)。
主に、実装に大きく依存します。たとえば、クラス 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()
余談ですが、少なくとも最初の例とおそらく2番目の例では、 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 のクラス定義を指すことになりますが、これはあなたが求めているものではないと確信しています。とはいえ、それは一般的に他の言語でははるかに難しいので、それが混乱のポイントの1つであったかどうかは理解しています.