Если вы создаете новые объекты внутри init, то целесообразнее передавать их уже готовыми в качестве аргументов, а для создания объекта использовать фабричный метод. Это отделит бизнес-логику от технической реализации создания объектов.
В этом примере init для создания подключения к базе данных принимает в виде аргументов host и port:
class Query:
def __init__(self, host, port):
self._connection = Connection(host, port)