向类中添加print()将显示行为,调用
b.a.x = 1
将使x.setter在一个负责的类中,而不是b类中的a.setter
例子:
class A(object)
.
.
@x.setter
def x(self, value):
print('x.setter acting')
self._x = value
class B(object):
.
.
@a.setter
def a(self, value):
print('a.setter acting') # adding print
if isinstance(value, A):
self._a = deepcopy(value)
elif isinstance(value, tuple):
self._a = A(value[0], value[1])
elif isinstance(value, int):
# ?
pass
b = B()
b.a.x = 1 # x.setter will be in charge not a.setter
输出:
x.setter acting
如果您希望由.setter负责,您可以:
class B(object):
.
.
@a.setter
def a(self, value):
print('a.setter acting') # adding print
if isinstance(value, A):
self._a = deepcopy(value)
elif isinstance(value, tuple):
self._a = A(value[0], value[1])
elif isinstance(value, int):
# ?
self._a.x = value
b = B()
b.a = 1 # a.setter will be in charge
输出:
a.setter acting