Files
PyPattyrn/pypatterns/structural/proxy.py
T
tylerlaberge 5cef83cf60 improved proxy implementation.
proxy must now contain all public methods that the subject has.
2016-08-24 21:04:35 -04:00

38 lines
914 B
Python

from abc import ABCMeta
class Proxy(object, metaclass=ABCMeta):
"""
Base Proxy class as part of the Proxy design pattern.
"""
def __init__(self, subject):
"""
Initialize a new proxy instance.
@param subject: The real subject this proxy calls upon.
"""
self._subject = subject
self._validate()
def _validate(self):
"""
Validate that the subject and this proxy follow the same interface.
@raise AttributeError: If the subject and this proxy do not follow the same interface.
"""
for attr in dir(self._subject):
if attr.startswith('_') or attr.startswith('__'):
continue
elif not callable(getattr(self._subject, attr, None)) or not callable(getattr(self, attr, None)):
raise AttributeError('Subject and Proxy must follow same interface')