У меня много классов, реализованных в моем коде. Теперь я понимаю, что для каждого метода, вызываемого для всех этих классов, мне нужно добавить строку:
with service as object:
Итак, я пытаюсь использовать шаблон Proxy для автоматического выполнения работы, это мой пример кода
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
Что мне нужно для такого результата? Спасибо
'NoneType' object has no attribute 'hello'
. - person poke   schedule 07.03.2013with a1 as a1
, но здесь это определенно не имеет никакого смысла. - person danodonovan   schedule 07.03.2013__enter__
должен вернутьself
… - person poke   schedule 07.03.2013