【发布时间】:2011-07-16 20:54:02
【问题描述】:
这种@property decorator 的使用是否适合获得对实例字段的良好封装?我试图实现 Foobar 类的客户端不能以任何方式将任意值分配给 Foobar 实例的字段vel,事实上绕过了属性设置器方法中定义的分配规则。
谢谢。
class Foobar(object):
def __init__(self):
self._vel = 0
@property
def vel(self):
return self._vel
@vel.setter
def vel(self, v):
self._vel = v if v > 0 else 0
该字段似乎封装得很好。
>>> foobar = Foobar()
>>> foobar.vel
0
>>> foobar.vel = -1
>>> foobar.vel
0
>>> foobar.vel = 1
>>> foobar.vel
1
【问题讨论】:
-
请注意,提高 ValueError 而不是静默限制值可能是更好的做法,这可能会造成混淆。如果检查离散值(例如枚举类型或字符串格式检查),我肯定会这样做;速度我不确定。
标签: python properties decorator encapsulation