Python Setter 抛出类型错误。这里出了什么问题?

问题描述 投票:0回答:1

我有一个数据类,其属性为 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'

我真的不明白我在这里做错了什么。 感谢您的任何建议!

python properties setter
1个回答
0
投票

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
的对象。

© www.soinside.com 2019 - 2024. All rights reserved.