Использование атрибута __dict__ в __getattr__ - PullRequest
0 голосов
/ 12 февраля 2019

Вот простой класс с настроенной реализацией __getattr__:

class Wrapper(object):
    def __init__(self, obj):
        self.obj = obj

    def __getattr__(self, name):
        func = getattr(self.__dict__['obj'], name)
        if callable(func):
            def my_wrapper(*args, **kwargs):
                print "entering"
                ret = func(*args, **kwargs)
                print "exiting"
                return ret
            return my_wrapper
        else:
            return func

Чего я не понимаю, так это почему вместо getattr(self.obj, name) используется *1006*, что более кратко?

Потому что, насколько я понимаю, self.__dict__['obj'] вызывает значение self.obj.Может ли это иметь какое-либо отношение к обратной совместимости?

1 Ответ

0 голосов
/ 12 февраля 2019

Полагаю, причина существования этого кода - автор пытался уклониться от бесконечной рекурсивной петли - не вызывать __getattr__ на self.obj

...