При обсуждении метаклассов the docs:
Вы можете, конечно, переопределить другие методы класса (или добавить новые методы); например, определение пользовательского метода
__call__()в metaclass позволяет настраивать поведение при вызове класса, например. не всегда создавая новый экземпляр.
Мои вопросы: предположим, что я хочу иметь пользовательское поведение при вызове класса, например, кэширование вместо создания свежих объектов. Я могу сделать это, переопределив метод __new__ класса. Когда я хочу вместо этого определить метакласс с __call__? Что этот подход дает, что не достижимо с помощью __new__?