【发布时间】:2016-03-03 12:27:02
【问题描述】:
我对 python 中的属性有点困惑。考虑以下代码
class A:
@property
def N(self):
print("A getter")
return self._N
@N.setter
def N(self,v):
print("A setter")
self._N = v
def __init__(self):
self._N = 1
class B:
@property
def N(self):
print("B getter")
return self.a.N
@N.setter
def N(self,v):
print("B setter")
self.a.N = v
def __init__(self):
self.a = A()
if __name__ == '__main__':
b=B()
b.N = 2
print(b.N, b.a.N)
b.N = 3
print(b.N, b.a.N)
B 应该类似于 A 的包装器。它使用 getter 和 setter 将 A 的属性映射到自身(当然也可以通过继承来实现)。 问题是,它在 python2.6 中根本无法按预期工作,而在 python3 中:
> python2 test.py
A getter
(2, 1)
A getter
(3, 1)
> python3 test.py
B setter
A setter
B getter
A getter
A getter
2 2
B setter
A setter
B getter
A getter
A getter
3 3
我做错了什么还是问题出在哪里?
【问题讨论】:
标签: python properties python-2.x getter-setter