【发布时间】:2020-07-28 22:02:56
【问题描述】:
假设我有这样的课程:
class C:
def __init__(self, stuff: int):
self._stuff = stuff
@property
def stuff(self) -> int:
return self._stuff
那么stuff 是只读的:
c = C(stuff=10)
print(c.stuff) # prints 10
和
c.stuff = 2
按预期失败
AttributeError: 无法设置属性
如何使用数据类获得相同的行为?如果我也想拥有setter,我可以这样做:
@dataclass
class DC:
stuff: int
_stuff: int = field(init=False, repr=False)
@property
def stuff(self) -> int:
return self._stuff
@stuff.setter
def stuff(self, stuff: int):
self._stuff = stuff
但是没有@stuff.setter 部分我怎么能做到呢?
【问题讨论】:
-
省略二传手?为什么数据类部分在这里相关?
-
@jonrsharpe: 忽略
setterdoe snot help,然后我仍然可以设置stuff:dc = DC(stuff=10), dc.stuff = 2将工作得“很好”;但它也应该失败。 -
也许这对这个问题有帮助 - 你的意思是包含一个引发错误的 setter 实现吗?
-
@juanpa.arrivillaga:这似乎冻结了所有属性。如果我有例如
stuff和more_stuff但只想将stuff设置为只读,但more_stuff应该是可设置的,这似乎不起作用。 -
是的,这不是一个直接的解决方案。似乎数据类在这里不太适合。也许我会玩
field,如果我让它按照你想要的方式工作,我会在这里写一个答案。
标签: python python-3.x python-dataclasses