First some information that might be relevant for the design decisions: I have a hierarchy of objects in Python that represent data within my database. At the top of my hierarchy I have the Meta object, which has n Community objects and each community also has n children object, of which the specifics aren't relevant. In my database this meta <-> community relationship is simply a table of the communities and the meta object in my code handles everything related outside of communities or the creation of such communities. My objects are very short lived, as the data in the database could update at any point and therefore the objects are created "per interaction". Each child stores its parent object, but retrieving children is done via methods like get_community_by_id or get_communities. The Problem I don't know what the best practice is for my particular situation: When deleting a community from the database, would it be more reasonable that the delete method is part of the community object or rather of the meta object, that would then have the community parsed it. If the children were directly given in the parent object and wouldn't have to be retrieved via a method, it would be obvious that the meta object has to handle the deletion of its child, as it has to keep track of them, but that isn't the case here. Pro of community object handling delete: Community object already given via self Pro of the meta object handling delete: The creation and deletion of each object is handled by its parent object I would also use the same design principles for the rest of my object hierarchy. Is there a given best practice for this kind of case? Thank you in advance! Continue reading...