Иметь объект со всеми возможными методами

#python

#python

Вопрос:

Есть ли способ создать класс, который каким-то образом имитирует имитацию, чтобы реализовать все возможные функции? Поэтому он никогда не должен возвращаться AttributeError , а вместо этого печатать оператор.

Ответ №1:

да, есть __getattr__ , см. Ссылку на Python

Пример

 class C:
    def __getattr__(self, attr):
        def print_fn_name():
            print(f"you called {attr}")
        return print_fn_name

c = C()
c.foo()
 

Ответ №2:

Да. unittest.mock.Mock является примером такого класса, который очень часто используется в тестировании.

https://docs.python.org/3/library/unittest.mock.html

Если вы хотите создать свой собственный Mock объект с нуля, посмотрите на волшебные методы, в частности __getattr__ , которые можно переопределить, чтобы вернуть любой объект для любого имени атрибута.