【发布时间】:2018-11-23 20:52:19
【问题描述】:
我有一个班级(简化视图):
class Record():
OrderStatusMapping = dict(zip(['0', '1', '2'], ['NEWO', 'PARF', 'FILL']))
def __init__(self):
self._OrderStatus = None
@property
def OrderStatus(self):
return self.OrderStatusMapping.get(self._OrderStatus)
@OrderStatus.setter
def OrderStatus(self, value):
self._OrderStatus = value
现在这个类是从不同的模块调用的,如下所示:
from core.record import Record
r = Record()
r.OrderStatus = '2'
然而,当我后来调用r.OrderStatus 时,由于某种原因,它返回'2' 而不是'FILL'。
在 VisualStudio 中调试变量我可以看到实际上它出现在我调用 r.OrderStatus = '2' 时它从不使用 @OrderStatus.setter 而是似乎让它自己的变量 OrderStatus 在运行中,不使用设置器,因此从不设置 @987654332 @。
在使用 getter 和 setter 时,我做了什么明显不好的事情吗?为什么没有按应有的方式称呼他们?
【问题讨论】:
-
你在使用 Python 2 吗?
-
您使用的是哪个版本的 Python?如果在 Python 2 上,那么你应该从
object继承你的类,property只适用于新式类。 -
附带说明,您应该使用
enum来表示状态,以随时强制值的有效性 (there's a backport for 2.x)。或者至少,检查 setter 中的输入。
标签: python getter-setter python-object