【问题标题】:Should a property return the value that was written to it?属性是否应该返回写入它的值?
【发布时间】:2023-03-05 14:54:01
【问题描述】:

对于一个对象属性,我们可以假设它指的是成功分配给它的那个值。

myobj.attr = w
r = myobj.attr
assert r == w

数据属性基本上是计算属性,它们的使用与常规属性一样。是否可以实现违反上述假设的属性?

我有意见 - 没有财产,但 set_x(value)get_x() - 但意见不算数。对于这个问题,是否有规则或权威人士的建议?

【问题讨论】:

    标签: python properties


    【解决方案1】:

    从纯粹的语义 POV 来看,getter/setter 对只是不支持计算属性的语言的计算属性等价物,所以我不希望 getter/setter 对(在 myobj.get_attr() / myobj.set_attr(w) 形式) 行为与属性不同。

    如果拥有违反此断言的属性会伤害您的敏感性,那么您可能希望使用“不完全是 setter”来更“明确地”转换值,即myobj.update_attr_from(something_different)(并最终将属性保持为只读)。

    但实际上这里并没有硬性规定,即使作为“最佳实践”,它也是值得商榷的(主要基于意见)。如果你这样做,绑定属性(带有 setter 的属性)的常见用例是验证值并在验证失败时引发一些异常,这也不是你对普通属性的期望。

    【讨论】:

      【解决方案2】:

      属性可以为所欲为。对于属性可以和应该做什么,没有规则或建议。

      如果myobj.attr 产生与分配的值不同的值对于您的特定用例有意义,那么就这样做。

      【讨论】:

        猜你喜欢
        • 2016-04-04
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多