我有一个数据类,其属性为 float 类型的“open”。 我添加了一个属性设置器,如果它设置为负值,它将抛出 ValueError:
@open.setter
def open(self, value: float) -> None:
if value < 0.0:
raise ValueError("Open value must be positive.")
self.open = value
我收到的错误是:
File "<string>", line 4, in __init__
File "/home/PATH/file.py", line 29, in open
if value < 0.0:
^^^^^^^^^^^
TypeError: '<' not supported between instances of 'property' and 'float'
我真的不明白我在这里做错了什么。 感谢您的任何建议!
OP 不是 MRE。
下面的代码是。 它展示了问题的解决方案。
from dataclasses import dataclass
@dataclass
class Foo:
def __init__(self):
self._open = 2.718
@property
def open(self) -> float:
return self._open
@open.setter
def open(self, value: float) -> None:
if value < 0.0:
raise ValueError("Open value must be positive.")
self._open = value
if __name__ == "__main__":
f = Foo()
assert 2.718 == f.open
f.open = 3.14
assert 3.14 == f.open
关键是你要
self.open
成为一个setter方法,
所以(私有)值属于另一个名为 self._open
的对象。