【发布时间】:2014-02-23 15:12:19
【问题描述】:
我偶然发现了以下在另一个问题中使用 getter 和 setter 的示例 Preferred way of defining properties in Python: property decorator or lambda?
由于 python 有隐式的 getter 和 setter,我想知道为什么要像下面这样显式地定义它们。这些示例有什么优势,还是只有当 getter/setter 涉及比下面的简化示例更复杂的事情时才有意义?
class Bla(object):
def sneaky():
def fget(self):
return self._sneaky
def fset(self, value):
self._sneaky = value
return locals()
sneaky = property(**sneaky())
最近版本的python增强了装饰器方法:
class Bla(object):
@property
def elegant(self):
return self._elegant
@elegant.setter
def elegant(self, value):
self._elegant = value
【问题讨论】:
-
“因为 python 有隐式的 getter 和 setter”。你能扩展一下吗?你是说如果你不使用
property,python 无论如何都会使sneaky成为一个属性?如果是这样,那不是真的。 -
通常情况下,人们放置 getter 或 setter 的唯一原因是在修改属性时在后台执行其他操作(例如设置标志或检查输入)。
标签: python