Вы упомянули рекурсию, но на самом деле не использовали рекурсию в своем коде.
Вы можете добиться желаемого поведения, реализуя рекурсивный метод, который форматирует заданную строку шаблона до тех пор, пока результат визуализации не будет таким же, как ввод :
def render(self, template):
rendered = template.format(**vars(self))
return rendered if rendered == template else self.render(rendered)
def print(self):
print(self.render("Filename is {file_name}"))
print(self.render("File {file} will be written to {path}"))
С указанными выше изменениями ваш код выведет:
Filename is ABC-2020-06.mp4
File /dev/null/ABC-2020-06.mp4 will be written to /dev/null