У меня есть много классов, реализованных в моем коде. Теперь я понимаю, что для каждого метода вызывается для всех этих классов нужно добавить строку:Прокси-шаблон в Python
with service as object:
Так что я пытаюсь использовать шаблон прокси автоматически выполнять работу, это мой пример код
class A(object):
def __init__(self, name):
self.name = name
def hello(self):
print 'hello %s!' % (self.name)
def __enter__(self):
print 'Enter the function'
return self
def __exit__(self, exc_type, exc_value, traceback):
print 'Exit the function'
class Proxy(object):
def __init__(self, object_a):
# object.__setattr__(self, '_object_a', object_a)
self._object_a = object_a
def __getattribute__(self, name):
service = object.__getattribute__(self, '_object_a')
with service as service:
result = getattr(service, name)
return result
if __name__=='__main__':
a1 = A('A1')
b = Proxy(a1)
b.hello()
a2 = A('A2')
b = Proxy(a2)
b.hello()
Все работает найти, у меня есть выход:
Enter the function A1
Exit the function A1
hello A1!
Enter the function A2
Exit the function A2
hello A2!
Но это не совсем мне нужно, потому что мне нужно, это эквивалент:
with a1 as a1:
a1.hello()
И я должен иметь выход:
Enter the function A1
hello A1!
Exit the function A1
Enter the function A2
hello A2!
Exit the function A2
Что мне нужно, чтобы иметь такой результат? Thanks
Этот пример не работает для меня: 'объект 'NoneType' не имеет атрибута«hello''. – poke
Я не знаю, что вы думаете, что означает «с a1 как a1», но это, конечно, не имеет никакого смысла здесь. – danodonovan
Я думаю, что ваш '__enter__' должен возвращать' self' ... – poke