Возможна ли обработка обращений к неопределенным методам класса в Python?

Здравствуйте! Возможно ли в питоне как-то обработать вызов метода, который явно не объявлен в классе. Пример в псевдокоде:
class foo(Object):
    def function_classic():
        print('Нормально вызывается, все как обычно')
    def any_other(*args):
        print('Вызывается при обращении к любому методу кроме function_classic')
        myotherclass.catcher('Здесь какой-то обработчик необычного обращения или любой другой код')
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
Avernial
@Avernial
Разрабатываю научное ПО на языке Python.
Для этого есть магический метод __getattr__, он вызывается тогда, когда нет атрибута в классе.

Вот простой пример:
class Foo(object):

    def __init__(self, value):
        self.value = value

    def __getattr__(self, name):
        return lambda: print("'{0}' doesn't exists!".format(name))


foo = Foo(10)
print(foo.value)
foo.some_function()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
https://docs.python.org/3/reference/datamodel.html...
>>> class Foo:
    def __getattr__(self, item):
        return lambda: item
>>> foo = Foo()
>>> foo.a
Out[8]: <function __main__.Foo.__getattr__.<locals>.<lambda>>
>>> foo.a()
Out[9]: 'a'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы