bue*_*rgi 10 python properties python-2.x getter-setter
我对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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我做错了什么或者到底出了什么问题?
rec*_*dev 25
A和B必须是Python 2.x中的新式类.
property([fget[, fset[, fdel[, doc]]]])
所以,如果你来自 object
class A(object):
...
class B(object):
...
Run Code Online (Sandbox Code Playgroud)
您的代码将按预期工作.
| 归档时间: |
|
| 查看次数: |
10127 次 |
| 最近记录: |