我正在尝试创建一个具有类似列表的属性的对象.这就是我的意思.
class Unit:
def __init__(self):
self.val = 0
class Bundle:
def __init__(self, N=3):
self.units = [ Unit() for i in range(N) ]
def getvals(self):
return [ unit.val for unit in self.units ]
def setvals(self, vals):
for i, val in enumerate(vals):
self.units[i].val = val
vals = property(getvals, setvals)
Run Code Online (Sandbox Code Playgroud)
现在,此对象的行为不符合预期.
>>> b = Bundle()
>>> b.setvals([1,2,3])
>>> print b.vals, b.getvals()
[1, 2, 3] [1, 2, 3]
>>> b.vals = [4,5,6]
>>> print b.vals, b.getvals()
[4, 5, 6] [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
所以语句"b.vals = x"和"b.setvals(x)"不等同.你能告诉我为什么,以及如何让它表现得正常吗?
在Python 2中,property仅适用于新样式对象; 你的Bundle班级必须继承自object:
class Bundle(object):
...
Run Code Online (Sandbox Code Playgroud)
一旦您进行了更正,该物业将按预期工作:
>>> b.vals = [4,5,6]
>>> b.vals
[4, 5, 6]
>>> b.getvals()
[4, 5, 6]
>>> [unit.val for unit in b.units]
[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |