【发布时间】:2010-12-05 23:43:12
【问题描述】:
在我看来,除了一点语法糖,property() 并没有什么好处。
当然,能够写成 a.b=2 而不是 a.setB(2) 是件好事,但隐藏 ab=2 不是一个简单的赋值这一事实似乎是个麻烦事,因为可能会发生一些意想不到的结果,例如a.b=2 实际上导致a.b 为1。或引发异常。或者性能问题。或者只是令人困惑。
你能给我一个具体的例子来很好地使用它吗? (用它来修补有问题的代码不算数;-)
【问题讨论】:
-
你错了。 .setB() 是针对没有实际属性的语言的补丁。 Python、C#和其他一些确实有属性,解决方法是一样的。
-
我见过 java 人更糟糕的事情,那就是为每个属性编写 getter 和 setter - 以防万一,因为以后重构一切都很痛苦。
-
@gnibbler,在不支持属性的语言中(或者至少有点等价的可能性,例如 Python 的
__getattr__/__setattr__,它大大早于属性),没有太多其他“Java伙计们”(在任何这些语言中,包括 C++!-)都可以做到,以保持封装。
标签: python properties