Answer : If I understand correctly, aggregation vs composition is about the responsibilities of an object to its members (e.g. if you delete an instance, do you also delete its members?). Mainly, it will depend a lot on the implementation. For example, to create a class A which receives an instance of class B (aggregation), you could write the following: class B(object): pass class A(object): def __init__(self, b): self.b = b b = B() a = A(b) But as a point of caution, there is nothing built-in to Python that will prevent you from passing in something else, for example: a = A("string") # still valid If you would like to create the instance of B inside the constructor of A (composition), you could write the following: class A(object): def __init__(self): self.b = B() Or, you could inject the class into the constructor, and then create an instance, like so: class A(object): def __init__(self, B): self.b = B() As an aside, in at least your