__getattr__ и __getattribute__
__getattribute__ вызывается каждый раз, когда мы пытаемся получить атрибут экземпляра. Даже если это произошло внутри класса с помощью self.__getattr__ вызывается только в том случае, если атрибут не был найден. Его можно спокойно переопределять.#теория
