Задача примерно такая. Есть система, в ней есть класс. В нем реализована куча методов, многие из которых разрушительные. Есть аттрибуты, через которые можно дойти до самых низов системы. Возникла необходимость предоставить API для пользователей, с помощью которого дать доступ к некоторым методам и аттрибутам объектов класса. Понятное дело, что разрушительные операции нужно запретить. Но как? Сразу в голову пришла идея сделать класс-прослойку, которая будет проверять допустимость аттрибута, что-то типа такого:
class SafeProxy(object):
def __init__(self, proxied):
self.__proxied = proxied
def __getattribute__(self, name):
if name == '_SafeProxy__proxied':
return super(SafeProxy, self).__getattribute__(name)
if name in allowed_attrs.get(self.__proxied.__class__.__name__, []):
return res
Но все равно __proxied будет доступен, а через него все остальные потроха. Оборачивать все допустимые операции в функции - получится очень некрасивое API. Какие есть варианты решения?