I have an object with a bunch @property getters and setters on it. I want to delegate to that object, including delegating the getting and setting. I also want to be able to override some setters in the delegating class. Delegation as described here works for getters but not for setters. Is there a simple way to do this short of verbosely duplicating all of the @property setters?
For example, in the following the underlying @a.setter is never hit:
class A:
_a = 'A.a'
_b = 'A.b'
@property
def a(self):
print('A.a.getter')
return self._a
@a.setter
def a(self, a):
print('A.a.setter')
self._a = a
@property
def b(self):
print('A.b.getter')
return self._b
@b.setter
def b(self, b):
print('A.b.setter')
self._b = b
class B(object):
_A = None
def __init__(self, A):
self._A = A
@property
def b(self):
print('B.b.getter')
return self._A.b
@b.setter
def b(self, b):
print('B.b.setter')
self._A.b = b
def __getattr__(self, name):
return getattr(self._A, name)
b = B(A())
print(b.a)
b.a = 123
b.b = 456