Пример с атрибутами функций весьма странный, ибо они устанавливаются в теле функции, т.е. после того как функция будет вызвана. Если обратиться к ним до вызова функции - получится исключение. Атрибуты функций тем не менее применяются, например, тот же декоратор
@wraps устанавливает атрибут __wrapped___ позволяет определить исходную функцию, которую завернули. Но в обычной практике, да, конечно антипаттерн